#define LINK_ENTITY_TO_CLASS(mapClassName,DLLClassName) \
static CEntityFactory<DLLClassName> mapClassName( #mapClassName );
这是半条命 2 的 Alien Swarm 模组中的一个宏,旨在使用 MSVC 编译。
我以前从未在宏中看到以 a 开头的参数#
,而且我不确定这是特定于 MSVC 的事情还是不常见。这是什么意思?
#define LINK_ENTITY_TO_CLASS(mapClassName,DLLClassName) \
static CEntityFactory<DLLClassName> mapClassName( #mapClassName );
这是半条命 2 的 Alien Swarm 模组中的一个宏,旨在使用 MSVC 编译。
我以前从未在宏中看到以 a 开头的参数#
,而且我不确定这是特定于 MSVC 的事情还是不常见。这是什么意思?
这是标准 C 和 C++ 的一部分,不是特定于实现的。#
预处理运算符将其参数字符串化。它获取传递给宏的任何标记,用于由其操作数指定的参数(在本例中为 parameter mapClassName
),并从中生成字符串文字。所以,举个简单的例子,
#define STRINGIZE(x) # x
STRINGIZE(Hello World)
// gets replaced with
"Hello World"
请注意,参数标记在字符串化之前不会被宏替换,因此如果Hello
或World
被定义为宏,结果仍然是相同的。您需要使用额外的间接级别来替换参数宏(链接的答案讨论了串联运算符##
,但同样适用于字符串化运算符。