2014-08-27 1 views
4

GCC에서 간부에 대한 경고 GCC 4.8에 대한 컴파일러 출력 : 당신이 C++ 11 모드에서 컴파일하는 경우누락 "실종 센티넬은"유용하게 경고합니다 C++ 11

$ g++ test.cc -Wformat 
test.cc: In function ‘int main(int, char**)’: 
test.cc:4:32: warning: missing sentinel in function call [-Wformat=] 
    execlp("test", "test", "arg1"); 
          ^
$ 

그러나, 어떤 진단이 인쇄되지 않습니다 :

$ g++ test.cc -std=c++11 -Wformat 
$ 

C++ 11에서이 경고를 사용할 수없는 이유는 무엇입니까? 그것을 다시 얻을 수있는 방법이 있습니까?

+0

'-std = C++ 98'에서도 ​​마찬가지입니다. – trojanfoe

+3

'-std = gnuXX' (기본값은 98)와 같은 것이 필요합니다. –

+0

실제로'-std = gnu11'은 경고를 되돌려줍니다. – trojanfoe

답변

4

execlp은 표준 C 함수가 아닙니다. 컴파일러가이를 "표준"함수로 인식하기 위해 인수의 모양을 알고있는 경우 -std=c++11 대신 -std=gnu++11이 필요합니다. 기본값은 -std=gnu++98입니다. Glibc는 execlp 선언에 sentinel 속성을 지정하여 상황을 개선 할 수 있습니다.