上下文
我阅读了关于关闭特定警告的Clang's "Controlling Diagnostics via Pragmas"部分。除了 -Wgnu-zero-variadic-macro-arguments 之外,它通常适用于所有警告。
代码是:
MyHeader.hpp
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgnu-zero-variadic-macro-arguments"
#import "header generating -Wgnu-zero-variadic-macro-arguments warning"
#pragma clang diagnostic pop
问题
Clang在编译导入MyHeader.hpp的翻译单元时生成 -Wgnu-zero-variadic-macro-arguments 警告。
的Env
Clang版本: Apple LLVM 6.0版(clang-600.0.51)(基于LLVM 3.5svn) 目标:x86_64-apple-darwin13.4.0 线程模型:posix
操作系统:Mac OS X 10.9.5
答案 0 :(得分:5)
这似乎适用于Xcode 6.4(6E35b)。该pragma现在禁止警告。
我在构建设置中有-Weverything
。如果没有诊断忽略,我肯定会收到警告:
','和__VA_ARGS__的令牌粘贴是GNU扩展
终端输出以匹配环境部分:
$ clang --version
Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
Target: x86_64-apple-darwin14.4.0
Thread model: posix
使用以下代码:
#define DEBUG
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgnu-zero-variadic-macro-arguments"
#import "Macros.h"
#pragma clang diagnostic pop
Macros.h包含:
#ifdef DEBUG
#define AssLog(condition, message, ...) NSAssert(condition, message, ##__VA_ARGS__)
#else
#define AssLog(condition, message, ...) if (!condition) NSLog((@"%@ [Line %d] " message), [NSString stringWithUTF8String:__PRETTY_FUNCTION__], __LINE__, ##__VA_ARGS__)
#endif
答案 1 :(得分:1)
接受的答案适用于此特定问题,但如果您尝试实际删除警告而不是隐藏警告,则可以使用-std=gnu++11
或-std=gnu++1y
或任何相关的gnu兼容标准进行编译将是您的代码库。我正在收到同样的警告,并且需要进行一些挖掘以了解它试图告诉我的内容。这是针对CLang ++的,但应该有一个GCC等价物。
相关警告
令牌粘贴',' VA_ARGS 是GNU扩展
环境
Apple LLVM version 7.0.2 (clang-700.1.81)
Target: x86_64-apple-darwin15.3.0
Thread model: posix