【发布时间】:2018-06-27 12:22:56
【问题描述】:
我正在尝试编译以下程序
#include <stdio.h>
#define __stringify_1(x...) #x
#define __stringify(x...) __stringify_1(x)
#define FOO(expression)\
printf("prefix" __stringify(expression))
int main(int argc, char **argv)
{
FOO(10 % 4); // <-- This is a problematic one
FOO(10 == 4);
}
这会在编译时发出警告: 警告:转换在格式末尾缺少类型 [-Wformat=]
这个警告的原因是表达式实际上被扩展为 printf("prefix" "10 % 4"),因此编译器需要一个“格式化程序”。是否有任何解决方案可以将此类表达式传递给宏而不会收到警告?
谢谢
【问题讨论】:
-
如果您不想格式化,请使用
puts。 -
将
%%用于% -
@mat 或 fputs() 以防字符串末尾不需要换行符。
标签: c gcc preprocessor stringification