используя #define и # для строкового преобразования, чтобы преобразовать другую макро константу в строку - PullRequest
2 голосов
/ 04 апреля 2020

Применительно к этому вопросу Макрос цитаты для определения строки . Идея состоит в том, что я хочу напечатать значение макроконстанты, скажем, для следующего кода:

#include<stdio.h>
#define X 4
#define Tostring(x) #x
main()
{
    printf(Tostring(X));
}

It это printng X вместо 4, но с Макрос кавычки для определения строки Я знаю, как это исправить, но кто-то может объяснить, что именно здесь представляет собой гонг?

1 Ответ

3 голосов
/ 04 апреля 2020

Чтобы напечатать 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.

...