我在SDK示例程序中找到了以下宏。在这种情况下,#value是什么意思?
#define VALUE_CHAR(value) #value, value
这可能是一个愚蠢的问题。但我不清楚为什么这样做。任何人都可以帮助我吗?
谢谢你的推荐
答案 0 :(得分:7)
字串。请参阅this页。
所以
VALUE_CHAR(1)
扩展为:
"1", 1
您可以使用这种宏来简化数组的初始化,例如:
#define MYDEF(x) { #x, x }
static struct {
const char *str;
int num;
} values[] = {
MYDEF(1),
MYDEF(2),
MYDEF(3)
};
答案 1 :(得分:3)
来自标准:
16.3.2#运算符[cpp.stringize]
字符串文字是 string-literal ,没有前缀。如果,替换列表中的 ,参数立即前面有
#
预处理令牌,两者都会被单个字符串文字预处理令牌替换,该令牌包含拼写相应参数的预处理标记序列。
这意味着:
#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
测试库中的用法示例:
#define BOOST_AUTO_TEST_SUITE( suite_name ) \
namespace suite_name { \
TheFunction( BOOST_STRINGIZE( suite_name ) ); \
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// ...
BOOST_AUTO_TEST_SUITE( MyTest );
将扩展为:
namespace MyTest {
TheFunction( "MyTest" );
// ^^^^^^^^