Чтобы напечатать 4 как вы sh, вы можете сделать одно из следующих действий:
Строкование результата:
#include<stdio.h>
#define Tostring(x) str(x)
#define str(x) #x
#define X 4
int main()
{
printf(Tostring(X));
}
или использование функции типа макросов для преобразования X в int:
#include<stdio.h>
#define X 4
#define Tostring(x)(X)
int main()
{
printf("%d\n", Tostring(X));
}
Первый пример - один из примеров, приведенных в документации . Там указано, что два уровня макрокоманд должны использоваться, если вы хотите структурировать результат раскрытия макроса. Результат раскрытия следующий:
Tostring (X) -> Tostring (4) -> str (4) -> "4"
Во втором примере вы связываете аргумент макроса Tostring с X из #define X 4
, и, таким образом, вы можете вывести значение как int.