мы можем использовать константу #define в объявлении структуры в качестве размера массива? - PullRequest
1 голос
/ 12 октября 2011

Я делаю следующее в C

#define MAX_DATA_SIZE 500;

struct reliable_state {

  char dataBuffer[MAX_DATA_SIZE]; 

}

Т.е. я хочу использовать константу #define в качестве размера массива в объявлении структуры. Но приведенный выше код дает странную ошибку

.c:36: error: expected ‘]’ before ‘;’ token

Так есть ли другой способ сделать это?

Ответы [ 3 ]

9 голосов
/ 12 октября 2011

Да, вы можете просто удалить ';'в вашей строке определения:

#define MAX_DATA_SIZE 500

При использовании define у ​​вас есть компилятор, который фактически «увидит» ваше определение структуры как

char dataBuffer[500;];

, что явно ошибочно.

3 голосов
/ 12 октября 2011

Когда вы используете #define, макрос справа определяется как есть. Например. здесь, вы просто должны исправить это до

#define MAX_DATA_SIZE 500  /* no semicolon */
1 голос
/ 12 октября 2011

Синтаксис для непустых объектно-подобных макроопределений:

#define MACRO_IDENTIFIER    REPLACEMENT

Обратите внимание, что в этом синтаксисе нет завершающей точки с запятой, в отличие от объявлений и операторов Си. Ваша точка с запятой стала частью ЗАМЕНЫ и была вставлена ​​туда, где вы использовали идентификатор макроса, получив

char dataBuffer[500;];

, что является синтаксической ошибкой, диагностированной компилятором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...