我在 SDK 示例程序中找到了以下宏。#value 在这种情况下意味着什么?
#define VALUE_CHAR(value) #value, value
字符串化。请参阅此页面。
所以
VALUE_CHAR(1)
扩展为:
"1", 1
您可以使用这种宏来简化数组的初始化,例如:
#define MYDEF(x) { #x, x }
static struct {
const char *str;
int num;
} values[] = {
MYDEF(1),
MYDEF(2),
MYDEF(3)
};
从标准:
16.3.2 # 运算符 [cpp.stringize]
字符串文字是没有前缀的字符串文字。如果在替换列表中,参数前面紧跟一个
#
预处理标记,则两者都被单个字符串文字预处理标记替换,该预处理标记包含对应参数的预处理标记序列的拼写。
代表着:
#define VALUE_CHAR(value) #value, value
VALUE_CHAR(some_value)
将扩展为:
"some_value", some_value
由预处理器。
例如,著名的 BOOST 库使用此运算符对令牌进行字符串化:
#define BOOST_STRINGIZE(X) BOOST_DO_STRINGIZE(X)
#define BOOST_DO_STRINGIZE(X) #X
Test 库中的使用示例:
#define BOOST_AUTO_TEST_SUITE( suite_name ) \
namespace suite_name { \
TheFunction( BOOST_STRINGIZE( suite_name ) ); \
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// ...
BOOST_AUTO_TEST_SUITE( MyTest );
将扩展为:
namespace MyTest {
TheFunction( "MyTest" );
// ^^^^^^^^