如何在接收函数指针的C函数定义中省略其参数声明?
避免C函数指针参数冗余的正确方式
当你频繁处理同类型函数指针传递时,重复书写参数类型确实会让代码臃肿难读。别用空括号()的过时写法——它不仅会在C23标准中被彻底移除,而且无原型的函数指针调用时不会做参数类型校验,很容易埋下bug。
最稳妥且兼容所有C标准的解决方案是用typedef给函数指针类型定义别名:
- 先声明函数指针类型
typedef int (*OperationFunc)(int, int, int);
这里OperationFunc就代表了“接收三个int参数、返回int的函数指针”这一类型。
- 用别名简化函数声明
int foo(int a, int b, int c, OperationFunc operation);
这样代码瞬间清爽,可读性大幅提升,而且完全不用担心兼容性问题。
相比之下,空括号()的写法属于C语言的历史遗留语法,早在C89就被标记为过时,现在C23直接移除,绝对不推荐使用。
内容的提问来源于stack exchange,提问作者Mehdi Charife
相关产品推荐
相关产品推荐

