如何使用Clang关闭-Wgnu-zero-variadic-macro-arguments警告?

时间:2014-11-14 14:57:29

标签: clang warnings suppress-warnings

上下文

我阅读了关于关闭特定警告的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

2 个答案:

答案 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