可变参数宏预处理报错求助:GCC预编译阶段代码无法通过
解决可变参数宏预处理失败的问题
我来帮你搞定这个预处理错误,你遇到的问题其实是两个小细节没处理对:
1. 宏参数的省略号用了中文全角字符
你写的宏定义里,参数列表的…是中文全角省略号,而GCC编译器只认英文半角的...。这就是第一个错误提示的根源——编译器把中文省略号当成了非法的宏参数字符。
2. 可变参数宏依赖C99标准
__VA_ARGS__是C99标准引入的特性,如果你的编译器默认用的是更老的C标准(比如C89),就会弹出那个警告。
修正后的代码
把宏定义里的中文省略号换成英文的,代码就变成:
#define eprintf(...) fprintf (stderr, __VA_ARGS__)
你的调用语句eprintf ("%s:%d: ", input_file, lineno)是没问题的,不用修改。
修正预处理命令
如果想彻底消除警告,可以在预处理时指定C99标准:
gcc -E -std=c99 macroTest.c -o macroTest
这样修改后,重新执行预处理命令,就能正常生成预处理后的文件了。
内容的提问来源于stack exchange,提问作者Alexanus
相关产品推荐
相关产品推荐

