Ошибки инициализации массива в C - PullRequest
0 голосов
/ 19 марта 2012

Я пытался запустить этот код:

#define ROW_CNT 8;
#define COLUMN_CNT 24;
#define FIRST_COLUMN 2;

unsigned int volume[ROW_CNT][COLUMN_CNT][ROW_CNT];

но я получаю следующие ошибки:

ожидаемый идентификатор или маркер '(' before ']'

Почему это?

Ответы [ 3 ]

4 голосов
/ 19 марта 2012

Снимите точки с запятой в ваших # определениях.

Директивы #define обрабатываются этапом предварительной обработки компиляции, который полностью связан с подстановкой текста.Таким образом, всякий раз, когда препроцессор выполняет подстановку текста, ваша программа становится

unsigned int volume[8;][24;][2;];

, что недопустимо C.

3 голосов
/ 19 марта 2012
#define ROW_CNT 8; 
#define COLUMN_CNT 24; 
#define FIRST_COLUMN 2; 

должно быть

#define ROW_CNT 8
#define COLUMN_CNT 24
#define FIRST_COLUMN 2

точка с запятой должна не использоваться для # define

1 голос
/ 19 марта 2012

Определение препроцессора, такое как ROW_CNT, заменяет любые экземпляры идентификатора в вашем коде значением, которое он определил как. Поэтому, как только препроцессор расширит ваши макросы, ваш код будет выглядеть так:

unsigned int volume[8;][24;][2;];

Как видите, точка с запятой включается после 8, 24 и 2, поскольку именно так вы определили ROW_CNT, COLUMN_COUNT и FIRST_COUNT, и это явно недопустимый синтаксис C.

Удалите точку с запятой в конце ваших #define s, и код скомпилируется.

...