相关疑难解决方法(0)

Variadic宏是非标准的吗?

对于debugbuilds,我通常使用Clang,因为它更好地格式化警告和错误,并使它更容易跟踪它们并修复它们.

但最近在添加了具有可变参数的宏之后,Clang告诉我以下内容(来自虚拟项目):

main.cpp:5:20: warning: named variadic macros are a GNU extension [-Wvariadic-macros]
#define stuff3(args...)  stuff_i(args)
Run Code Online (Sandbox Code Playgroud)

我知道macroname(args...)在各种编译器中编译很好,包括Visualstudio,Sunstudio,当然还有GCC.但是为了确保clang是正确的,我尝试了另外两种扩展可变参数的方法:

1号:

#define stuff1(...)  stuff_i(...)
Run Code Online (Sandbox Code Playgroud)

2号:

#define stuff2(...)  stuff_i(__VA_ARGS__)
Run Code Online (Sandbox Code Playgroud)

我都收到这条消息:

main.cpp:3:16: warning: variadic macros were introduced in C99 [-Wvariadic-macros]
Run Code Online (Sandbox Code Playgroud)

...这让我想知道Variadic宏是否实际上是C++标准的一部分(当然我知道预处理器是独立解释的)?

c++ c-preprocessor variadic-macros

32
推荐指数
2
解决办法
2万
查看次数

GCC警告:ISO C不允许使用命名的可变参数宏

使用以下命令

gcc -c -Wall -Wextra -pedantic -ansi -std=c99 -fstack-protector-all -fstack-check -O3 root.c -o  rootTESTOBJECT
Run Code Online (Sandbox Code Playgroud)

我得到编译器警告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
Run Code Online (Sandbox Code Playgroud)

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

我已经尝试编辑76行了

76 #define crumb(phrase0...) printf("")
Run Code Online (Sandbox Code Playgroud)

看看这是否修复了警告,但没有任何乐趣.

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

gcc gcc-warning

11
推荐指数
1
解决办法
8663
查看次数

标签 统计

c++ ×1

c-preprocessor ×1

gcc ×1

gcc-warning ×1

variadic-macros ×1