宏中以#标记开头的参数
-
28-09-2020 - |
题
#define LINK_ENTITY_TO_CLASS(mapClassName,DLLClassName) \
static CEntityFactory<DLLClassName> mapClassName( #mapClassName );
这是来自Alien Swarm mod For Half-Life2的宏,旨在与MSVC一起编译。
我从来没有见过前面有一个论点。 #
在宏之前,我不确定这是MSVC特定的东西还是不常见。这是什么意思?
解决方案
这是标准C和C++的一部分,不是特定于实现的。该 #
预处理运算符对其参数进行字符串化。它为其操作数指定的参数(在本例中为参数)接受传入宏的任何令牌 mapClassName
),并从它们中生成一个字符串。所以,举一个简单的例子,
#define STRINGIZE(x) # x
STRINGIZE(Hello World)
// gets replaced with
"Hello World"
请注意,参数标记是 不是 宏在它们被字符串化之前被替换,所以如果 Hello
或 World
被定义为一个宏,结果仍然是相同的。你需要 使用额外的间接级别 要获取参数宏替换(链接的答案讨论连接运算符, ##
, ,但同样适用于字符串化运算符。
不隶属于 StackOverflow