You need to enable JavaScript to run this app. C语言中如何调用用typedef函数指针定义的宏?
优惠活动
大模型
产品
解决方案
定价
更多

C语言中如何调用用typedef函数指针定义的宏?

C语言宏定义函数指针的调用方法

你注释中写的FPTR_MACRO(1, 1);就是正确的调用方式,直接取消注释即可正常调用目标地址的函数。

原理说明

你定义的FPTR_MACRO会在预处理阶段被展开为((fptr)0x1234),这个表达式是一个符合fptr类型定义的函数指针。C语言中函数指针的调用语法和普通函数完全一致,直接在指针后追加括号传入参数即可。

如果需要更明确的语义表达,也可以选择显式解引用函数指针的写法,两种写法完全等价:

(*FPTR_MACRO)(1, 1);

注意事项

  • 该写法仅适用于明确知晓0x1234地址处存在对应类型函数的场景(如嵌入式开发、内核调试等),普通用户态程序直接访问绝对内存地址会触发段错误。
  • 请确保目标函数的调用约定、参数列表和返回值与你typedef定义的fptr类型完全匹配,否则会出现未定义行为。

完整代码示例

#include <stdio.h>
    
typedef void (*fptr)(int, int);

// 0x1234 为目标函数的入口地址
#define FPTR_MACRO ((fptr)0x1234) 
    
void main(void){
    // 两种调用方式二选一即可,效果一致
    FPTR_MACRO(1, 1);
    // (*FPTR_MACRO)(1, 1);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 21:57:02