我在SDK示例程序中找到了下面的宏。在这种情况下,#value的意思是什么?这是什么意思#value在宏中
#define VALUE_CHAR(value) #value, value
这可能是个愚蠢的问题。但我不清楚为什么它是。谁能帮我?
谢谢你的建议
我在SDK示例程序中找到了下面的宏。在这种情况下,#value的意思是什么?这是什么意思#value在宏中
#define VALUE_CHAR(value) #value, value
这可能是个愚蠢的问题。但我不清楚为什么它是。谁能帮我?
谢谢你的建议
字符串化。见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)
};
从标准:
16.3.2#运算符[cpp.stringize]
甲字符串文字是字串文本没有前缀。如果位于替换列表中,则参数立即为,前面有
#
预处理令牌,两者都被替换为单个字符串文字预处理标记,该标记包含相应参数的预处理标记序列的拼写。
这意味着:由预处理器
"some_value", some_value
:
#define VALUE_CHAR(value) #value, value
VALUE_CHAR(some_value)
将扩大到。
例如,著名的Boost库使用该运营商stringize令牌:
#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");
// ^^^^^^^^
'#value,value'是什么意思?这真的是一个有效的陈述吗? –
这不是新的。 http://stackoverflow.com/questions/14351971/what-does-x-inside-ac-macro-mean/ – devnull
http://www.cquestions.com/2009/01/what-is-use-of-and例如,运营商在c.html –