我正在尝试编译以下程序
#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”),因此编译器需要“格式化程序”。是否有任何解决方案可以将这些表达式传递给宏而不会收到警告?
由于
答案 0 :(得分:2)
使用printf("prefix%s", __stringify(expression))
停用expression
的格式化影响。
答案 1 :(得分:1)