2013-05-10 4 views
2

Я случайно объявил массив без длины, написав enum foo bar[];, а gcc дал мне предупреждение «array 'bar' assumed to have one element».«Предупреждение: массив« foo »предполагается иметь один элемент» ошибка

Есть ли способ сделать gcc превратить это в ошибку, вместо того чтобы просто предупредить меня и предположить, что я имел в виду enum foo bar[1]? Я не могу придумать никаких обстоятельств, при которых я намеренно не учитывал бы длину массива.

+0

Per 6.9.2, условное определение 'enum foo bar [];' становится 'enum foo bar [] = {0};' если в блоке перевода нет внешнего определения. Поэтому компилятор выходит за рамки своих обязанностей, чтобы предупредить об этом, будьте благодарны за это. К сожалению, поскольку он предупреждает об этом по умолчанию, я думаю, вы можете превратить его только в ошибку, выполнив все предупреждения. –

+0

@ DanielFischer До сих пор я просверлил в голову, что в C обязательно указывать размер массива во время объявления, если вы его не инициализируете там. Как правильно я? Или что-то изменилось после C99 или C11? Я заключаю что-то вроде 'int arr [];' предполагается, что массив 'arr' имеет размер' 1', а единственный элемент инициализируется '0'? –

+0

@ Rüppell'sVulture Это для вещей в области файлов. Для них предварительные определения превращаются в реальные определения, если в блоке трансляции нет внешнего определения, а для массивов, объявленных без измерения, это приводит к одноэлементным массивам. Для деклараций области блока размер является обязательным, либо явно между скобками, либо неявно от инициализатора. –

ответ

1

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

Вы можете использовать -Werror, чтобы включить все предупреждения в ошибки. Я не мог найти вариант превратить только один в ошибку.

+0

Можно также включить -Wall, чтобы дать вам как можно больше предупреждений об ошибках. Почти никогда вы не хотите исправлять все в -Wall – xaxxon