C константы, выбрасывающие ошибки времени компиляции - PullRequest
1 голос
/ 05 марта 2011

Несколько человек прокомментировали мой C-код здесь, сказав, что я должен использовать константы в качестве счетчиков циклов, а не писать их жестко. Я согласен с ними, так как это моя практика при написании кода Java, но у меня возникают ошибки времени компиляции, когда я пытаюсь использовать константы в объявлениях массивов и условных циклах.

Чтобы объявить константу в C, синтаксис будет #define NAME value.

В моем коде у меня есть две константы, BUFFER - это буфер чтения файла, а PACKED - размер выходного массива.

Я использую BUFFER для инициализации char inputBuffer[BUFFER]; в качестве глобальной переменной, которая работает, но когда я пытаюсь использовать PACKED

#define PACKED    7; // this line is in the header of file, just below preprocessors
int packedCount;
char inputPack[PACKED]; //compression storage
for (packedCount=0; packedCount<= PACKED; packedCount++){ 

Я получаю error: expected ‘]’ before ‘;’ token в char inputPack[PACKED] И
error: expected expression before ‘;’ token в строке инициализации цикла. Обе ошибки исчезают, когда я заменяю PACKED на 7.

Ответы [ 3 ]

3 голосов
/ 05 марта 2011

Вы явно не публикуете код в точности так, как он отображается в исходном файле.

Как минимум, вы пропускаете точку с запятой после char inputPack[PACKED].

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

2 голосов
/ 05 марта 2011

отсутствует символ ; после символа inputPack[PACKED]

1 голос
/ 05 марта 2011

Попробуйте использовать что-то кроме PACKED, например PACKEDSIZE. может означать, что ваш компилятор использует PACKED для чего-то другого (например, связанного со структурой упаковки) Кроме того, как отмечают другие ответы, вам не хватает;

...