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

问题描述 投票:0回答:1

这是我的一个老问题here的后续问题。我找到了一些像这样的代码:

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

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

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

c++ string macros
1个回答
7
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.