对于我以前的一个问题here,这是一个后续问题。我找到了一些像这样的代码:
#define TYPESUPPORT(T) \
... \
static const char* get_type_name() \
{ \
return #T; \
} \
...
其中T
是变量类型(例如int
)。 #T
用于获取宏输入的纯文本名称。
这样做安全吗?如何,#T
如何分配?是否为每个宏调用或其他内容分配const char*
或const char[]
字符串文字,就像我的第一个问题一样?
答案 0 :(得分:7)
宏只执行文本到文本的翻译。因此,在TYPESUPPORT(int)
展开后,该函数将如下所示:
static const char* get_type_name()
{
return "int";
}
正如链接问题中所解释的那样,字符串文字具有静态存储持续时间,因此返回此指针没有问题。它来自#T
扩展的事实在这个编译阶段是无关紧要的。