Я случайно объявил массив без длины, написав enum foo bar[];
, а gcc дал мне предупреждение «array 'bar' assumed to have one element
».«Предупреждение: массив« foo »предполагается иметь один элемент» ошибка
Есть ли способ сделать gcc превратить это в ошибку, вместо того чтобы просто предупредить меня и предположить, что я имел в виду enum foo bar[1]
? Я не могу придумать никаких обстоятельств, при которых я намеренно не учитывал бы длину массива.
Per 6.9.2, условное определение 'enum foo bar [];' становится 'enum foo bar [] = {0};' если в блоке перевода нет внешнего определения. Поэтому компилятор выходит за рамки своих обязанностей, чтобы предупредить об этом, будьте благодарны за это. К сожалению, поскольку он предупреждает об этом по умолчанию, я думаю, вы можете превратить его только в ошибку, выполнив все предупреждения. –
@ DanielFischer До сих пор я просверлил в голову, что в C обязательно указывать размер массива во время объявления, если вы его не инициализируете там. Как правильно я? Или что-то изменилось после C99 или C11? Я заключаю что-то вроде 'int arr [];' предполагается, что массив 'arr' имеет размер' 1', а единственный элемент инициализируется '0'? –
@ Rüppell'sVulture Это для вещей в области файлов. Для них предварительные определения превращаются в реальные определения, если в блоке трансляции нет внешнего определения, а для массивов, объявленных без измерения, это приводит к одноэлементным массивам. Для деклараций области блока размер является обязательным, либо явно между скобками, либо неявно от инициализатора. –