为何要针对过时K&R定义与标准C定义进行条件编译?
兼容老式C编译器的写法
那段带#ifdef __STDC__的代码是为了适配ANSI C(C89)之前的老式C编译器:
__STDC__是编译器预定义宏,当编译器遵循ANSI C标准时会被激活,此时使用标准的函数定义写法double cos(double x)。- 在ANSI C普及前的K&R C(最初的C语言标准)里,函数参数不能在括号内直接声明类型,必须采用“旧式定义”:先写
double cos(x),再在函数体前单独声明参数类型double x;。
这种写法放在现在确实冗余,但在几十年前新旧编译器并存的时期,是为了让代码能在不同环境下都正常编译。如今主流编译器都全面支持标准C,直接写double cos(double x) { ... }就足够,旧式写法只会徒增代码复杂度。
内容的提问来源于stack exchange,提问作者CPlus
相关产品推荐
相关产品推荐

