2013-06-01 2 views
8

#warning 지시문을 사용하는 경우 하나의 경고가 아닌 두 개를 생성합니다. 생성하는 것은 하나이며, 추가로 warning: #warning is a GCC extension [enabled by default]입니다.#warning 지시문이 GCC 확장 인 것에 대한 GCC 경고를 비활성화하는 방법은 무엇입니까?

나는 #warning 지시어의 결과 자체를 -Wno-cpp과 함께 억제 할 수 있지만, 이는 내가 원하는 것과 반대입니다.

대신 #pragma message()을 사용하여이 문제를 해결할 수 있지만 이는 # 경고 지침을 무의미하게 만듭니다. 경고 경고를 표시하지 않을 방법이 없습니까?

+1

GCC로 전달할 수있는 옵션은 무엇입니까? –

+0

'-g -static -static-libgcc -Wall -Wextra -pedantic -Wno-vla -Wsizeof-pointer-memaccess -Wmissing-declarations -march = 네이티브 -fexceptions -fexpensive-optimizations -flto -O3 -std = C++ 1y -fsanitize = address'이 경우입니다 - 내 대답은 아래를보십시오, 나는 그것이 책임이 있다는 것을 알게되었습니다. – Riot

답변

3

Ah는이 경고를 사용하는 것으로 보이며 다른 대부분의 GCC 경고가 있기 때문에 특정 경고를 무시한 것처럼 보이지 않습니다. -pedantic을 제거하면 경고에 대한 경고가 제거됩니다.

0
#ifdef __GNUC__ 
#warning "no warning here!" 
#endif 

-pedantic으로, 또는 GCC없이 컴파일,하지만 여전히 경고를 줄 것이다 (그리고 경고가 오류로 에스컬레이션 경우 실패).

UPDATE : 는 this related question에 따르면, 선택적으로 GNU 고유의 #pragma들

+0

물론 컴파일 할 수는 있지만 경고를 없애기 위해 아무 것도하지 않습니다 :'경고 : #warning은 GCC 확장 기능입니다 [기본값으로 설정] ' – Riot

+0

예, 방금 깨달았습니다. 절망적 인 일을 꺼내기위한 프라그마를 찾고 있습니다. ('#pragma GCC diagnostics ignored -Wunknown-pragmas "가 작동하지 않는 것 같네요.) – wildplasser

0

사실, 다음과 같은 일을해야에 대한 경고를 해제 할 깨끗한 해결책이 없다. 이를 통해 gcc 경고를 표시하거나 무시할 수 있습니다.

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wcpp" 

... 

#pragma GCC diagnostic pop 
+2

이것은 좋은 생각이지만, 이것은 - 경고와 함께 작동하지 않을까 걱정됩니다. 다음에서 테스트 코드를 참조하십시오. http://coliru.stacked-crooked.com/view?id=53358c525169b7c2750ed1eb09dff702-0f11904895a20602a6e5ca9f4b5b0039 – Riot