C Препроцессор, Stringify результат макроса

Я хочу зашифровать результат расширения макроса.

Я попробовал следующее:

#define QUOTE(str) #str
#define TEST thisisatest
#define TESTE QUOTE(TEST)

И TESTE расширяется до: «ТЕСТ», а я пытаюсь получить «этот». Я знаю, что это правильное поведение препроцессора, но может ли кто-нибудь помочь мне найти другой?

Using TESTE #TEST is not valid
Using TESTE QUOTE(thisisatest) is not what I'm trying to do
41
задан Brian Tompsett - 汤莱恩 26 February 2016 в 16:25
поделиться

1 ответ

Вот так:

#include <stdio.h>

#define QUOTE(str) #str
#define EXPAND_AND_QUOTE(str) QUOTE(str)
#define TEST thisisatest
#define TESTE EXPAND_AND_QUOTE(TEST)

int main() {
    printf(TESTE);
}

Причина в том, что когда аргументы макроса подставляются в тело макроса, они раскрываются , если не появляются с операторами препроцессора # или ## в этом макросе. Итак, str (со значением TEST в вашем коде) не раскрывается в QUOTE , но раскрывается в EXPAND_AND_QUOTE .

74
ответ дан 27 November 2019 в 00:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: