如何在C++中分配`#input`类型的宏字符串?

Kei*_*h M 0 c++ string macros

这是怎么样的后续问题的我的老问题之一在这里.我找到了一些像这样的代码:

#define TYPESUPPORT(T)              \
...                                 \
static const char* get_type_name()  \
{                                   \
    return #T;                      \
}                                   \
...
Run Code Online (Sandbox Code Playgroud)

T变量类型在哪里(例如int).#T用于获取宏输入的纯文本名称.

这样做安全吗?如在,如何#T分配?是否为每个宏调用或其他东西分配一个const char*const char[]字符串文字,就像在我的第一个问题中一样?

Bar*_*mar 7

宏只是执行文本到文本的翻译.因此,在TYPESUPPORT(int)扩展之后,该函数将如下所示:

static const char* get_type_name()  
{                                   
    return "int";                      
} 
Run Code Online (Sandbox Code Playgroud)

正如链接问题中所解释的那样,字符串文字具有静态存储持续时间,因此返回此指针没有问题.它来自扩展的事实#T在这个编译阶段是无关紧要的.