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

函数指针定义中是否允许参数名?合法性求证

确认带命名参数的函数指针声明是标准C合法写法

嘿,你完全不用怀疑——这个写法是标准C明确允许的,并非GCC专属扩展!

核心依据:C标准对函数指针参数列表的规定

在C标准(比如C99、C11及之后的版本)里,函数指针的参数列表规则和普通函数声明是一致的:

函数指针的参数类型列表中,既可以只指定参数类型,也可以同时为参数添加标识符(也就是你看到的命名参数)。

具体来说,参考C11标准的6.7.6.3节第7条:

参数类型列表可以指定参数的类型,也可以为参数声明标识符。

这意味着int (*func)(int a, int b)这种写法,和更常见的int (*func)(int, int)完全等价——参数名a和b只是可选的标识符,编译器会忽略它们的实际名称,只关注参数类型。

补充说明:关于&foo的写法

顺带提一句,=&foo的写法也是标准合法的:函数名foo会隐式转换为指向该函数的指针,所以func = foo和func = &foo效果完全一样,两种写法都被标准允许。

为什么这种写法少见?

正如你所说,函数指针本身的语法已经足够绕,再加上参数名确实会增加视觉复杂度,而且这些参数名对编译器没有实际作用(只是给阅读代码的人做提示),所以日常代码里很少有人这么写,但这绝对不是语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:04:04