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

能否在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:03:33