-Wundef未与克编译指示忽略++

问题描述 投票:5回答:2

考虑下面的代码:

#if MACRO_WITHOUT_A_VALUE
int var;
#endif

int main(){}

当,g++ -std=c++1z -Wundef -o main main.cpp编译 它产生以下警告:

main.cpp:1:5: warning: "MACRO_WITHOUT_A_VALUE" is not defined [-Wundef]
 #if MACRO_WITHOUT_A_VALUE
     ^

我想保持启用了警告标志,但抑制这种特定的实例。 我申请了以下内容:

#ifdef __GNUC__
#pragma GCC diagnostic ignored "-Wundef"
#pragma GCC diagnostic push
#endif

#if MACRO_WITHOUT_A_VALUE
int var;
#endif

#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif

int main(){}

这不仅解决了clang++问题。

该命令clang++ -std=c++1z -Wundef -o main main.cpp关掉了警告。 该命令g++ -std=c++1z -Wundef -o main main.cpp作为与以前相同的[-Wundef]警告建立。

我怎样才能抑制-Wundef g++警告?

g++ (Ubuntu 5.1.0-0ubuntu11~14.04.1) 5.1.0
clang version 3.8.0
c++ g++ compiler-warnings clang++ pragma
2个回答
3
投票

我当第三者头被诱导的警告之前所做的就是将它们包装在使用#pragma GCC system_header只是沉默所有从头部的警告我自己的私人头。我用我自己的包装,如果需要保持包括整齐,允许在未来的一个额外的定制点。


0
投票

这不是禁止警告,但固定预处理器的代码,以避免它。下面的测试是基于类似的问题here,使用clang -Weverything ...

#define ZERO 0
#define ONE 1
#define EMPTY

// warning: 'NOTDEFINED' is not defined, evaluates to 0 [-Wundef]
#if NOTDEFINED
#warning NOTDEFINED
#endif

// false
#if ZERO
#warning ZERO
#endif

// true
#if ONE
#warning ONE
#endif

// error: expected value in expression
#if EMPTY
#warning EMPTY
#endif

// false
#if defined(NOTDEFINED) && NOTDEFINED
#warning NOTDEFINED
#endif

// false
#if defined(ZERO) && ZERO
#warning ZERO
#endif

// true
#if defined(ONE) && ONE
#warning ONE
#endif

// error: expected value in expression
#if defined(EMPTY) && EMPTY
#warning EMPTY
#endif

在一个班轮#if defined(SOME_MACRO) && SOME_MACRO可避免此警告。要明确处理的情况下...

#if defined(DEBUG_PRINT)
#if DEBUG_PRINT
... true
#else
... false
#endif
#else
#error DEBUG_PRINT must be defined
#endif

为了处理EMPTY看到这一点:How to test if preprocessor symbol is #define'd but has no value?

© www.soinside.com 2019 - 2024. All rights reserved.