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