[英]c/c++ (VS2008) enclose macro param in quotes
對於需要一定程度調試的C應用程序中的大量函數調用,我想添加一個宏來簡化我必須做的輸入。
現在我正在調用這樣的函數:
aDebugFunction(&ptrToFunction, __LINE__, "ptrToFunction", param1, param2, etc)
所以我想讓我們編寫一個為我做前3個參數的宏,如下所示:
#define SOMEDEFINE(x) &x, __LINE__, "x"
但是,正如你們大多數人會立刻知道的那樣,這不會起作用,它不會用給定x的名稱替換“x”,而只是將“x”作為第三個參數傳遞。
我對這個預處理器宏發生的事情的了解是非常有限的,因此我的谷歌搜索能力也是無用的,因為不知道在哪里搜索確切。
我希望你們其中一個人/女孩能給我一個解決方案,或指出我正確的方向。
您需要使用#
轉換令牌預處理器的字符串命令。 您應該以這種方式定義第二個宏:
#define SOMEDEFINE(x) &x, __LINE__, # x
或者,如果x
也可以是宏調用,並且您希望字符串包含宏的擴展,則需要使用輔助宏:
#define TOKEN_TO_STRING(TOK) # TOK
#define STRINGIZE_TOKEN(TOK) TOKEN_TO_STRING(TOK)
#define SOMEDEFINE(x) &x, __LINE__, STRINGIZE_TOKEN(x)
例如,如果您有以下代碼:
#define SHORT_NAME a_very_very_very_long_variable_name
SOMEDEFINE(SHORT_NAME)
然后,使用第一個宏,它將擴展為
&a_very_very_very_long_variable_name, __LINE__, "SHORT_NAME"
而使用第二個宏,它將擴展到:
&a_very_very_very_long_variable_name, __LINE__, "a_very_very_very_long_variable_name"
你實際上可以做得更好: #define SOMEDEFINE( X, ... ) aDebugFunction( &(X), __LINE__, #X, __VA_ARGS__ )
然后你可以簡單地調用這樣的代碼: SOMEDEFINE( ptrToFunction, param1, param2, etc )
這將有效地調用: aDebugFunction( &( ptrToFunction ), __LINE__, "ptrToFunction", param1, param2, etc )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.