Подтвердить что ты не робот

Ошибка препроцессора при определении =

Я пробовал какую-то неудобную предварительную обработку и придумал что-то вроде этого:

#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: ошибка: ожидаемое выражение перед '= токеном

Почему это?

4b9b3361

Ответ 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.