gpt4 book ai didi

GCC 警告 : ISO C does not permit named variadic macros

转载 作者:行者123 更新时间:2023-12-04 01:43:08 24 4
gpt4 key购买 nike

使用以下命令

gcc -c -Wall -Wextra -pedantic -ansi -std=c99 -fstack-protector-all -fstack-check -O3 root.c -o  rootTESTOBJECT

我收到编译器警告
root.h:76:22: 警告:ISO C 不允许命名可变参数宏
72 #ifdef Debug
73 #include <stdio.h>
74 #define crumb(phrase0...) printf(phrase0)
75 #else
76 #define crumb(phrase0...)
77 #endif

我相信这个选项
-ansi -std=c99
允许使用可变参数宏,无论如何它都会根据文档...

我曾尝试将第 76 行编辑为
76 #define crumb(phrase0...) printf("")

看看这是否修复了警告,但没有喜悦。

编译器版本是 Apple 的 gcc,版本 4.2.1
我不确定我是否需要对此过于担心,但我真的不喜欢警告。我错过了什么标志?

最佳答案

#define crumb(phrase0...) <whatever>正在为变量参数 ( phrase0 ) 命名 ( ... )。

这是一个 GCC extension .

C99确实定义了一种将变量参数传递给宏的方法(参见 §6.10.3/12 和 §6.10.3.1/2):变量参数是未命名的
在定义的左侧(即只是 ... ),并在右侧引用为 __VA_ARGS__ , 像这样:

#define crumb(...) printf(__VA_ARGS__)

(顺便说一下,你的 gcc 参数不应该同时包含 -ansi-std=c99 : -ansi 指定了早期的 C 标准(被称为 ANSI C、C89 或 C90);这两个选项的组合只会发生在在这种情况下选择 C99,因为在参数列表中 -std=c99 出现在 -ansi 之后,最后一个获胜。)

关于GCC 警告 : ISO C does not permit named variadic macros,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6750512/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com