2012-03-19 4 views
11

C, C++ 및 Java 코드 기반에서 코드 정리, 서명/부호 비교 비교, 정적 분석 실행 등을 수행합니다. 우리가 얻고있는 경고의C/C++ 코드를 정리하면 variadic 매크로의 문제점이 드러납니다.

하나는

warning: ISO C does not permit named variadic macros 

그리고 그 동반자가 나는 문제를 해결하기 위해 C99 standard variadic macro를 사용하는 C 코드에서 지금

warning: ISO C99 requires rest arguments to be used 

경고하지만, C입니다 ++ 코드, 정답은 무엇입니까? 같은 C99 스타일을 사용하면 다른 경고가 나타납니다.

warning: anonymous variadic macros were introduced in C99 

어떤 답변이 표시되지 않습니까?

Linux에서 GCC (G ++) 4.4.3을 사용하고 있습니다.

내가 거기 수정, 또는 코드의 특정 섹션을 해제 할 수있는 몇 가지 플래그, 또는 다른 방법입니다 바라고 있어요 -하지만 거의 모든 파일에 사용되는 로그 ...

+0

가능한 중복 (http://stackoverflow.com/questions/4786649/are-variadic-macros-nonstandard) –

+1

를 사용하여 C++ 11 가변 인자 매크로 비표준?인가]. GCC 커맨드 라인에'-std = C++ 0x' 또는'-std = C++ 11'을 입력하십시오. 또는 경고를 무시하십시오. –

+0

그래, C++ 11을 사용한 카드는 아직 카드에 들어 있지 않다. (아직) – Petriborg

답변

13

사용에 대한 특정 경고를 비활성화하려면 gcc 옵션 -Wno-variadic-macros을 사용하십시오.

편집 : #pragma GCC diagnosticdescribed here를 사용

코드의 섹션에 대한 경고를 해제하지만, 일반적으로 그것을 떠나 (주석에서). 의

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wno-variadic-macros" 

    // Your code and/or include files 
    // (No variadic warnings here) 

#pragma GCC diagnostic pop 
+1

코드 섹션에 대한 경고를 사용하지 않도록 설정하는 방법이 있습니까? 이 방법을 사용하면'경고 : ISO C99에 휴식 인수가 사용되어야합니다 .'를 비활성화하는 방법 – Petriborg

+1

@Petriborg : http://gcc.gnu.org/onlinedocs/gcc-4.6.3/gcc/Diagnostic-Pragmas.html# 진단 -Pragmas – Hasturkun

+0

감사합니다. @Hasturkun 시도해 보겠습니다. – Petriborg