Ошибка препроцессора при определении =
Я пробовал какую-то неудобную предварительную обработку и придумал что-то вроде этого:
#include <stdio.h>
#define SIX =6
int main(void)
{
int x=6;
int y=2;
if(x=SIX)
printf("X == 6\n");
if(y=SIX)
printf("Y==6\n");
return 0;
}
gcc дает мне ошибки:
test.c: В функции 'main:
test.c: 10: 8: ошибка: ожидаемое выражение перед '= токен
test.c: 12: 8: ошибка: ожидаемое выражение перед '= токеном
Почему это?
Ответы
Ответ 1
==
- это единственный токен, его нельзя разделить пополам. Вы должны запустить gcc -E
в своем коде
На страницах руководства GCC:
-E
Остановка после этапа предварительной обработки; не запускайте собственно компилятор. Выходной сигнал форма предварительно обработанного исходного кода, который отправляется на стандартный вывод.
Входные файлы, которые не требуют предварительной обработки, игнорируются.
Для вашего кода gcc -E
выдается следующий вывод
if(x= =6)
printf("X == 6\n");
if(y= =6)
printf("Y==6\n");
Второй =
- это то, что вызывает сообщение об ошибке expected expression before ‘=’ token
Ответ 2
Препроцессор не работает на уровне символов, он работает на уровне маркера. Поэтому, когда он выполняет замещение, вы получаете что-то эквивалентное:
if (x = = 6)
вместо желаемого:
if (x==6)
Для этого существуют некоторые особые исключения, такие как оператор стробирования #
.
Ответ 3
if(x=SIX)
анализируется как
if (x= =6).
Итак, вы получаете ошибку.
Ответ 4
Какую инструментальную цепочку вы используете? Если вы используете GCC, вы можете добавить опцию -save-temps
и проверить промежуточный результат test.i
для устранения неполадки.
Я подозреваю, что у вас есть пробел между x=
и =6
.