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

ISO C标准中函数指针参数的函数表示法语义是否有标准依据?

关于C语言函数参数中函数表示法的标准定义与语义说明

这两个函数声明在C标准中完全等价,标准并没有赋予函数表示法“禁止传入空函数指针”的特殊语义,《Modern C》里的说法属于开发者之间的代码风格约定,而非标准层面的明确定义。

具体说明如下:

  • 按照C标准(包括你查阅的3220n版草稿)的规则,当函数参数被声明为函数类型时,编译器会自动将其调整为对应的函数指针类型。也就是说void handler(void)作为参数,和void(*handler)(void)是完全一致的,编译器会把前者等价处理为后者。
  • 你用GCC trunk编译无警告,正是因为这两个声明是兼容的,编译器判定它们是同一个函数的重复声明,不存在冲突。
  • 《Modern C》中提到的“语义上强调不允许空指针”,是作者推荐的一种编码习惯:用函数表示法来暗示调用者该参数不能传入NULL,用指针表示法则允许传入NULL。但这只是一种约定俗成的代码提示,没有标准强制约束,编译器也不会因为使用了函数表示法就自动检查参数是否为NULL。

内容的提问来源于stack exchange,提问作者Fabio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 03:35:56