You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何要针对过时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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 17:32:01