Я хочу зашифровать результат расширения макроса.
Я попробовал следующее:
#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
Вот так:
#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
.