1

我在 SDK 示例程序中找到了以下宏。#value 在这种情况下意味着什么?

#define VALUE_CHAR(value)       #value, value
4

2 回答 2

7

字符串化。请参阅页面。

所以

VALUE_CHAR(1)

扩展为:

"1", 1

您可以使用这种宏来简化数组的初始化,例如:

#define MYDEF(x) { #x, x }

static struct {
    const char *str;
    int num;
} values[] = {
    MYDEF(1),
    MYDEF(2),
    MYDEF(3)
};
于 2013-08-29T14:10:05.017 回答
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" );
//               ^^^^^^^^
于 2013-08-29T14:15:41.500 回答