簡體   English   中英

c / c ++(VS2008)用引號括起宏參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM