2016-08-08 4 views
2

Учитывая следующий код:-Wundef не игнорируются с прагмой в г ++

#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 
+1

Можете ли вы использовать '#if defined (MACRO_WITHOUT_A_VALUE) && MACRO_WITHOUT_A_VALUE'? – Ryan

+0

Возможно, но я обернуваю сторонний код, который я бы предпочел не изменять. –

+0

Вместо этого оберните его в '# ifdef'? – Ryan

ответ

2

Что я делал раньше, когда заголовки третьей стороны были индуцирование предупреждения был обернуть их в своем собственном заголовке, который использует #pragma GCC system_header просто заглушить все предупреждения от этого заголовка. Я использую свою собственную оболочку, чтобы поддерживать ее в чистоте и в случае необходимости использовать дополнительную настройку в будущем.

 Смежные вопросы

  • Нет связанных вопросов^_^