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

如何在C语言中将函数作为宏的参数传入

解决C宏参数带括号的编译错误

你遇到的编译错误是因为C预处理器不允许宏参数名称里包含括号——你写mu_run(func())时,func()被当作了参数名的一部分,这违反了宏定义的语法规则。

把参数改成不带括号的func是完全正确的做法,修正后的宏定义如下:

#define mu_run(func) func() == 0 ? printf_green("Test passed: %s\n", #func) : printf_red("Test failed: %s at line %d", #func, mu_check())

关键说明:

  • 宏参数仅保留func,在宏体内调用时补加括号func(),既符合语法规则,又能正确执行目标函数。
  • 使用#func做字符串化处理时,会直接将传入的函数名(或带参函数调用语句)转换成字符串。比如调用mu_run(test_add),展开后#func就是"test_add";如果调用mu_run(test_divide(10,2)),#func会变成"test_divide(10,2)",完全匹配你显示测试内容的需求。

内容的提问来源于stack exchange,提问作者Aaron Barkat-Masih

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 10:43:12