나는 삭제 된 답변을 보았지만 나와 함께 견뎌 냈다 ... 실제로는 (적어도 내 테스트에서는) 정확했다. 나는 당신이 발견 한 것이 흥미롭고 버그에 가까울 것이라고 생각합니다.
내 테스트 (Mac OS X 10.10.2 Yosemite에서 실행되는 Mac OS X 10.9.4 Mavericks에서 빌드 된 GCC 4.9.1)까지는 -Werror=write-strings
이 경고 메시지를 표시하지 않습니다 GCC 팀이 다른 견해를 가지고 있음을 알 수 있지만 아마 버그라고 생각합니다). -Werror
이 적용될 때만 오류가 발생합니다. 여러분의 편의를 위해
$ cat x.c
#include <stdio.h>
int main(void)
{
char *test = "data";
printf("%s\n", test);
return 0;
}
$ gcc -O3 -g -std=c11 -c x.c
$ gcc -O3 -g -std=c11 -c x.c -Wwrite-strings
x.c: In function ‘main’:
x.c:5:18: warning: initialization discards ‘const’ qualifier from pointer target type
char *test = "data";
^
$ gcc -O3 -g -std=c11 -c x.c -Werror=write-strings
x.c: In function ‘main’:
x.c:5:18: warning: initialization discards ‘const’ qualifier from pointer target type
char *test = "data";
^
$ gcc -O3 -g -std=c11 -c x.c -Werror -Wwrite-strings
x.c: In function ‘main’:
x.c:5:18: error: initialization discards ‘const’ qualifier from pointer target type [-Werror]
char *test = "data";
^
cc1: all warnings being treated as errors
$ gcc -O3 -g -std=c11 -c x.c -Wall -Wextra -Werror=write-strings
x.c: In function ‘main’:
x.c:5:18: warning: initialization discards ‘const’ qualifier from pointer target type
char *test = "data";
^
$ gcc -O3 -g -std=c11 -c x.c -Wall -Wextra -Werror
$ gcc -O3 -g -std=c11 -c x.c -Wall -Wextra -Werror -Wwrite-strings
x.c: In function ‘main’:
x.c:5:18: error: initialization discards ‘const’ qualifier from pointer target type [-Werror]
char *test = "data";
^
cc1: all warnings being treated as errors
$ gcc -O3 -g -std=c11 -c x.c -Wall -Wextra -Werror -Werror=write-strings
x.c: In function ‘main’:
x.c:5:18: error: initialization discards ‘const’ qualifier from pointer target type [-Werror]
char *test = "data";
^
cc1: all warnings being treated as errors
$
, 쉽게 볼 수 있도록,이는 GCC의 I 실행 한 명령입니다 :
가 여기에 내가 도망 무엇 일반적 -Werror
실행할 수없는 경우
gcc -O3 -g -std=c11 -c x.c
gcc -O3 -g -std=c11 -c x.c -Wwrite-strings
gcc -O3 -g -std=c11 -c x.c -Werror=write-strings
gcc -O3 -g -std=c11 -c x.c -Werror -Wwrite-strings
gcc -O3 -g -std=c11 -c x.c -Wall -Wextra -Werror=write-strings
gcc -O3 -g -std=c11 -c x.c -Wall -Wextra -Werror
gcc -O3 -g -std=c11 -c x.c -Wall -Wextra -Werror -Wwrite-strings
gcc -O3 -g -std=c11 -c x.c -Wall -Wextra -Werror -Werror=write-strings
는, 다른 문제로 인해 실패 할 -Werror -Wwrite-strings
으로 시험판 빌드를해야 할 수도 있지만 수정하고 확인할 수있는 쓰기 가능한 문자열 문제를 식별합니다. 그런 다음 -Wwrite-strings
오류를 확인하면 컴파일시 또는 심지어 -Werror=write-strings
을 유지하면서 실수로 실수를하거나 예상되는 컴파일러 버그가 수정되도록 명령 줄에서 -Werror
을 제외하고 다시 돌아갈 수 있습니다. 그 때 당신은 당신이 정말로 원했던 방식으로 모든 것을 작동시킬 수 있습니다).
gcc의 bugzilla 계정 생성이 닫힙니다. 나에게 버그 리포트를 제출할 수 있습니까? (필요한 경우) –
버그 질라 (bugzilla)를 검색하여 이전에보고 된 증거가 있는지 확인할 수 있습니까? 기본적으로'-Wwrite-strings' 또는'-Werror = write-strings'을 찾아보고이 버그와 관련된 버그가보고 된 것을 볼 수 있습니까? 관련성이있는 항목을 찾을 수 없다면 내 자격 증명을 파고 버그를 만듭니다. 소스가 나쁘지는 않습니다 (그러나 그들이 요청한 전처리 된 소스는 커질 것입니다; 나는 심지어 ''을 필요로하지 않는 repro를 생성해야하며, 그 라인을'extern void function (const char * str);로 대체하고 (printf() 대신에) –
필자가 발견 한 것은 [this] (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=35648)인데, 주석 기자 중 한 명이' -Werror = write-strings'는 트릭을 수행해야하며, 사람들이 사용하는 결과를 보여주는 수많은 검색 결과가 있습니다. –