能否在C语言中使用typeof创建同类型函数?附代码示例
在C语言中用typeof创建同类型函数并生成否定版本的实现
typeof的使用前提
typeof是GNU C的扩展特性,标准C(C99及以后版本)并不原生支持,只有GCC、Clang这类兼容GNU扩展的编译器能识别它。如果你的代码不需要跨编译器兼容,就可以用它来获取函数类型。
修正你的示例代码
你提供的示例代码存在语法错误,函数定义必须显式声明参数列表,修正后的可运行代码如下:
int f(int a, int b) { return a + b; } // 用typeof获取f的函数类型,定义同类型的f2 typeof(f) f2(int a, int b) { return -f(a, b); }
typeof(f)仅描述了函数的返回值与参数类型组合,无法替代参数名的声明,所以必须写出(int a, int b)。
实现生成否定版本的宏
你想要的MAKE_NEGATION_OF宏有两个问题:一是a、b未声明,二是仅适配固定参数的函数。针对双int参数的场景,修正后的宏如下:
#define MAKE_NEGATION_OF(function) \ typeof(function) function##_negated(int a, int b) { \ return -function(a, b); \ }
宏的使用示例
// 定义原函数 int add(int a, int b) { return a + b; } // 通过宏生成否定版本的函数 MAKE_NEGATION_OF(add) #include <stdio.h> int main() { printf("%d\n", add(3, 5)); // 输出8 printf("%d\n", add_negated(3, 5)); // 输出-8 return 0; }
限制说明
- 这个宏仅适用于接收两个int参数、返回int类型的函数,若要适配其他参数类型或参数数量,需要修改宏内的参数声明部分。
- 代码必须在支持GNU扩展的编译器下编译,GCC默认启用该扩展,无需额外编译参数。
内容的提问来源于stack exchange,提问作者Abdulmalek Almkainzi
相关产品推荐
相关产品推荐

