c - 带有 "%"符号的表达式的 gcc 字符串化

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

谢谢

最佳答案

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

关于c - 带有 "%"符号的表达式的 gcc 字符串化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48321131/

相关文章:

assembly - 如何在字符串定义中将 ASCII 字符大写?

android - 如何使用 Ant 使用 Prebop 生成 android apk

syntax - (定义 | :) mean in Inno Setup Preprocessor documentation conventions?

c - GtkTreeView - 将用户数据设置为一行

c - printf 中的参数评估序列

c - wdm.h中类型名称 'R'中的 'PRKMUTEX'是什么意思?

c - int var 得到奇怪的值

c - 使用 C 中的简单 HTTP 服务器支持 gzip/zip 文件压缩

c - 在 OS X 上使用 -m32 编译 union 的冗余大小

c - ptrace(),如何停止在子进程中被跟踪?