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

时间:2018-01-04 20:12:23

标签: c++ string macros

对于我以前的一个问题here,这是一个后续问题。我找到了一些像这样的代码:

#define TYPESUPPORT(T)              \
...                                 \
static const char* get_type_name()  \
{                                   \
    return #T;                      \
}                                   \
...

其中T是变量类型(例如int)。 #T用于获取宏输入的纯文本名称。

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

1 个答案:

答案 0 :(得分:7)

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

static const char* get_type_name()  
{                                   
    return "int";                      
} 

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