2012-09-22 6 views
2

기본적으로 리터럴에서 null-chars에 대한 경고를 무시하고 싶습니다.경고를 비활성화하는 방법 : null 문자는 리터럴에 보존됩니까?

GCC는이 경고가 기본적으로 사용 가능하다고 말합니다.

이 경고에 대해 적절한 -Wno- 옵션을 찾을 수 없습니다.

당신은 ^@가 ASCII 0 문자를 나타냅니다이

const char input[] = "abc^@123"; 

같은 코드에서 이러한 경고를 얻을 (당신은 Ctrl 키V0를 통해 vim으로 입력 할 수 있습니다 - 그리고 g를 통해 그것을 확인 명령 모드에서 커서가 문자 위에 놓이는 동안).

+1

모든 이유를 좋아'\ 0 '대신 – Mat

+0

를 사용하지 않는.?. '-std = gnu99'를 사용하면 raw 문자열을 사용할 수 있으며 그 경우에는 경고가 나타나지 않습니다.하지만 실현 가능성이 없습니다. – Mat

+0

@Mat, 나는 그것을 테스트 했으므로'\ 000 '-'\ 0'는 작동하지 않지만'\ 000'을 사용하면 경고 메시지가 나타나지 않습니다. 도망 갈 필요가 없으므로 프로토콜 캡쳐를 복사/붙여 넣기 할 수 있습니다. – maxschlepzig

답변

3

렉서에서 발생하고 있으며 수표를 사용 중지 할 수없는 것처럼 보입니다. :-(여기 libcpp/lex.c의 코드는 다음과 같습니다 당신이 볼 수 있듯이

if (saw_NUL && !pfile->state.skipping) 
    cpp_error (pfile, CPP_DL_WARNING, 
     "null character(s) preserved in literal"); 

는 경고를 방출하기 전에 옵션에 확인이 없습니다