2010-06-08 4 views
1

서문 : 경고를 사용 중지하는 것은 좋은 생각이 아닙니다. 어쨌든, 이것에 대한 기술적 인 질문이 있습니다.gcc의 -W 값은 실제 경고와 일치합니까?


GCC 3.3.6를 사용하여, 나는 다음과 같은 경고 얻을 :

-Wno-theNameOfTheWarning 

같은 인수를 제공하여 gcc warning options에 설명 된대로

choosing ... over ... because conversion sequence for the argument is better. 

지금, 나는이 경고를 비활성화 할을 그러나 나는 경고의 이름을 모른다. 이 경고를 비활성화하는 옵션의 이름을 어떻게 알 수 있습니까? 변경할 수 없습니다 외부 라이브러리의 헤더에 발생하기 때문에


나는, 경고를 해결할 수 없습니다입니다. 그것은 부스트 ​​직렬화 (rx(s, count))에 있습니다

template<class Archive, class Container, class InputFunction, class R> 
inline void load_collection(Archive & ar, Container &s) 
{ 
    s.clear(); 
    // retrieve number of elements 
    collection_size_type count; 
    unsigned int item_version; 
    ar >> BOOST_SERIALIZATION_NVP(count); 
    if(3 < ar.get_library_version()) 
     ar >> BOOST_SERIALIZATION_NVP(item_version); 
    else 
     item_version = 0; 
    R rx; 
    rx(s, count); 
    std::size_t c = count; 
    InputFunction ifunc; 
    while(c-- > 0){ 
     ifunc(ar, s, item_version); 
    } 
} 

이미 #pragma GCC system_header을 시도했지만이 영향을 미치지 아니합니다. -I 대신 -isystem을 사용하면 작동하지 않습니다.

일반적인 질문은 남아 있습니다. 경고 메시지의 텍스트를 알고 있습니다. 그러나 gcc warning options과의 상관 관계는 알 수 없습니다.

+2

이 경고를 표시하는 코드가 실제로 포함 된 경우 매우 도움이되며 질문을 더 완전하게 작성하십시오. – unwind

+3

... 왜 아직도 gcc 3.3을 사용하고 있습니까? – kennytm

+0

우리는 최신 gcc 버전으로 마이그레이션하지만 gcc 3.3을 지원해야합니다. – SebastianK

답변

7

당신은 옵션이 -fdiagnostics-show-option 옵션을 사용하여 주어진 경고와 관련된 것을 알 수 있습니다 최소의 컴파일 량에 대한 경고를 비활성화하여 자신의 코드에서 비슷한 실수를 범하면 경고를받습니다.

편집 :이 -Wconversion 것으로 보인다. (소스를 파킹하여 발견 - 경고 문구의 일부를 grep하면 warning(OPT_W_conversion, ...에 대한 호출을 찾을 수 있습니다.)

+0

불행히도 GCC 3.3.6에서는이 옵션을 사용할 수 없습니다. – SebastianK

+0

@SebastianK : 글쎄, 어색해. 다행히도'-isystem'이 당신을 위해 잘 될 것이지만, 그렇지 않다면 나는 당신의 코드를 다른 곳으로 옮겨서 새로운 버전의 GCC로 컴파일하려고 노력할 것이다. 아마도 경고를 생성하는 아주 간단한 테스트 케이스를 만들 수있을 것 같습니다. – Cascabel

+0

@SebastianK : 나는 당신을 위해 그것을 찾은 것 같아요.하지만 저는 여전히 경고를 끄지 않으려 고 노력하고 있습니다. – Cascabel

5

경고를 제거하는 코드를 변경하는 것은 어떻습니까? 컴파일러에서 수행 할 캐스트를 선택하는 대신 매개 변수 중 하나를 특정 유형으로 캐스팅해야하는 것 같습니다.

+0

외부 라이브러리에서 발생하기 때문에 가능하지 않습니다. 자세한 내용은 원래 질문을 편집했습니다. – SebastianK

+0

@Sebastian : 당신이 말하기를 가능하지 않다는 것과 "외부 라이브러리에서 경고를 수정했습니다. 정말 큰 문제는 아니 었습니다." ;) –

+0

@Roger Pate :) 문제를 해결하는 것은 큰 문제가 아니었지만 내부 프로세스로 인해 추가 작업이 필요했기 때문에이를 피하기 위해 노력했습니다. – SebastianK

4

두 지점 : 당신은에 경고를 떠나야한다 - 컴파일러 경고가 나중에 병이 징조 - 등 충돌, 손상,

을 다음은 -Wnotanidiot 플래그로 사용됩니다. 이것은 gcc의 2.9 ... 3.o 버전에서 발생했습니다. 여전히 작동하는지 모르겠지만이 경고는 유효합니다. 이것에 대해

$ gcc -fdiagnostics-show-option -Wall foo.c 
foo.c: In function ‘main’: 
foo.c:3: warning: suggest parentheses around assignment used as truth value [-Wparentheses] 

그리고 내 두 센트 : 실제로 경고를 해결 할 수있는 방법이 없습니다 가정, 잘하면 사용자가 관리 할 수있는

+0

http://gcc.gnu.org/ml/gcc-bugs/2000-06/msg00187.html –

+0

누군가 내가 내가 바보라고 생각하는 경우. 일부 프로그래머에게는 약간의 경고가 거의 없습니다. Phil Edwards가 부가 기능을 만들었습니다. 그것은 가능했다. 이 토론을 위해 당신이 결정할 수 있지만 그것이 존재했는지 여부를 결정할 수 있습니다. 나는 그걸 가지고 놀았다. –

-1

질문에 대한 대답은 다음과 같은 질문에 대한 대답입니다. "사용할 수없는 옵션의 이름을 어떻게 알 수 있습니까? 이 경고? " "컴파일러의 소스를 읽습니다."