2013-05-10 4 views
2

실수로 길이가없는 배열을 enum foo bar[];으로 작성하고 gcc가 경고 "array 'bar' assumed to have one element"을 표시했습니다."경고 : 배열 'foo'가 하나의 요소를 가진 것으로 가정합니다."오류

gcc를 오류로 바꾸는 방법이 있습니까? 나를 경고하고 대신에 enum foo bar[1]을 사용한다고 가정합니다. 의도적으로 배열의 길이를 버리는 어떤 상황도 생각할 수 없습니다.

+0

6.9.2에 따라 번역 단위에 외부 정의가 없으면'enum foo bar [];가'enum foo bar [] = {0};이됩니다. 따라서 컴파일러는 경고해야 할 의무를 넘어서 고맙게 받아 들여야합니다. 불행히도 기본적으로 경고하기 때문에 모든 경고 오류를 만들어 오류로만 변경할 수 있다고 생각합니다. –

+0

@DanielFischer 지금까지는 C에서 초기화 중에 배열의 크기를 언급하는 것은 C에서 필수적이라고 내 머리 속에 뚫어 놓았습니다. 정확합니까? 아니면 C99 또는 C11 이후에 변경된 사항이 있습니까? 나는'int arr [];과 같은 결론을 내린다. 배열'arr'은 크기가'1'이고 유일한 요소는'0'으로 초기화된다. –

+0

@ Rüppell 's Vulture 이것은 파일 범위를위한 것입니다. 이 경우 임시 단위 정의는 변환 단위에 외부 정의가 없으면 차원을 넘어 선언 된 배열의 경우 요소 정의 배열로 변환되어 실제 정의로 바뀝니다. 블록 범위 선언의 경우 크기는 대괄호 사이에 명시 적으로 또는 초기화 프로그램에서 암시 적으로 필수입니다. –

답변

1

http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

당신은 오류로 모든 경고를 설정하는 -Werror를 사용할 수 있습니다. 그 중 하나만 오류로 바꾸는 옵션을 찾을 수 없습니다.

+0

또한 가능한 한 오류가 발생하도록 많은 경고를하기 위해 - 벽을 켤 수도 있습니다. 거의 모든 것을 수정하고 싶지는 않습니다. -Wall – xaxxon