Рубрики

Напишите макрос C PRINT (x), который печатает x

На первый взгляд кажется, что написание макроса C, который печатает свой аргумент, является детской игрой. Следующая программа должна работать, т.е. она должна печатать x

#define PRINT(x) (x)

int main()

  printf("%s",PRINT(x));

  return 0;

}

Но это приведет к ошибке компиляции, потому что тип данных x , который компилятор принимает как переменную, неизвестен. Теперь это не выглядит так очевидно. Не так ли? Угадайте, что, следующие также не будут работать

#define PRINT(x) ('x')
#define PRINT(x) ("x")

Но если мы знаем одну из менее известных черт языка Си, написание такого макроса — действительно детская игра. C В C есть директива #, также называемая «Stringizing Operator», которая выполняет эту магию. В основном директива # преобразует свой аргумент в строку. Вуаля! так просто сделать все остальное. Таким образом, вышеуказанная программа может быть изменена, как показано ниже.

#define PRINT(x) (#x)

int main()

  printf("%s",PRINT(x));

  return 0;

}

Теперь, если ввод PRINT (x) , он напечатает x . На самом деле, если на входе PRINT (geeks) , он напечатает geeks .

Вы можете найти подробности этой директивы на портале Microsoft здесь .

Рекомендуемые посты:

Напишите макрос C PRINT (x), который печатает x

0.00 (0%) 0 votes