我正在尝试编译以下程序
#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"),因此编译器需要一个“格式化程序”。是否有任何解决方案可以将此类表达式传递给宏而不收到警告?
谢谢
最佳答案
使用 printf("prefix%s", __stringify(expression))
禁用 expression
的格式化影响。
关于c - 带有 "%"符号的表达式的 gcc 字符串化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48321131/