gcc带有“%”符号的表达式的字符串

时间:2018-01-18 12:15:42

标签: c gcc preprocessor stringification

我正在尝试编译以下程序

#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”),因此编译器需要“格式化程序”。是否有任何解决方案可以将这些表达式传递给宏而不会收到警告?

由于

2 个答案:

答案 0 :(得分:2)

使用printf("prefix%s", __stringify(expression))停用expression的格式化影响。

答案 1 :(得分:1)

来自printf

  

%后跟另一个%字符会将一个%写入流。

所以,请尝试加倍%%,如下所示:

FOO(10 %% 4);