Почему GCC не нравится это? - PullRequest
2 голосов
/ 16 сентября 2009

Я пытаюсь выучить C и часто зацикливаюсь на себе, не жалуюсь:)

Во всяком случае, я написал программу, и GCC не нравится. Следующий код НЕ является программой, но демонстрирует проблему:

#define MAXLINE = 1000

int main()
{
   int tmp = MAXLINE;
   char line[MAXLINE];

   return 0;
}

Когда он компилируется, я получаю следующую ошибку:

test.c: 7: ошибка: ожидаемое выражение перед токеном ‘=’

Если я заменю символическую константу MAXLINE на int 1000, все будет работать.

Что происходит?

Ответы [ 7 ]

21 голосов
/ 16 сентября 2009

Когда препроцессор заменяет ваше определение MAXLINE, ваш код меняется на

int main()
{
   int tmp = = 1000;
   char line[= 1000];
   return 0;
}

Препроцессор C очень тупой! Не добавляйте ничего в свои #defines (без равных, без точек с запятой, без ничего)

20 голосов
/ 16 сентября 2009

Определения не нуждаются в знаках равенства:)

#define maxline 1000
10 голосов
/ 16 сентября 2009

Не должно быть = в определении просто

#define MAXLINE 1000
3 голосов
/ 16 сентября 2009

Вы должны иметь

#define MAXLINE 1000

Вы можете прочитать больше здесь http://gcc.gnu.org/onlinedocs/cpp/Object_002dlike-Macros.html#Object_002dlike-Macros

3 голосов
/ 16 сентября 2009

Использовать # определить без '=':

#define MAXLINE 1000
3 голосов
/ 16 сентября 2009

Оператор #define не нуждается в знаке равенства.

Следует читать:

#define MAXLINE 1000

1 голос
/ 16 сентября 2009
#define MAXLINE 1000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...