символические константы - PullRequest
0 голосов
/ 20 марта 2010
#include<conio.h>
#include<stdio.h>
#define abc 7

int main()
{

int abc=1;

printf("%d",abc);

getch();

return 0;
}

почему эта программа выдает ошибку времени компиляции

Ответы [ 5 ]

3 голосов
/ 20 марта 2010

Вы присваиваете 7=1, что недействительно. Поскольку вы определили abc как 7, препроцессор переводит строку:

int abc=1;

до:

int 7=1;

Что является синтаксической ошибкой в ​​C (мой gcc говорит синтаксическая ошибка перед числовой константой ).

2 голосов
/ 20 марта 2010

Вы объявляете значение макроса "abc" как 7. Так что, если снова включить имя макроса как переменная, это даст ошибку.

рассмотрим следующее

значение abc равно 7. Так что будет обработано как 7 = 1. Так что это даст ошибку.

2 голосов
/ 20 марта 2010

Вы определяете abc как 7.

Тогда int abc=1 превращается в int 7=1, что абсурдно.

Почему Вы это делаете?

0 голосов
/ 20 марта 2010

Когда препроцессор заменяет abc на 7, следующая строка становится недействительной:

int 7=1;

Идентификатор в C, не может быть просто числом.

0 голосов
/ 20 марта 2010

Препроцессор C выполняет слепую замену abc на 7, что приводит к:

int 7=1;

что явно является ошибкой.

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