我在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 –