簡體   English   中英

在典型的xstr宏中“ x”是什么意思?

[英]What does “x” mean in the typical xstr macro?

定義字符串化宏的常見做法是:

#define str(token) #token
#define xstr(token) str(token)

為什么通常使用x前綴? “ x”有什么含義嗎?

(我的猜測可能是它代表“擴展”(如果有的話),但我沒有證據支持這一點。)

正如其他人建議的那樣, x似乎用於擴展,或者我也看到擴展也用於擴展 關於GNU 字符串化的文章中有對此用法的引用。

他們將其表述為:

“如果要對結果進行字符串化,則必須使用兩個級別的宏。”

#define xstr(s) str(s)
#define str(s) #s
#define foo 4
str (foo)
     → "foo"
xstr (foo)
     → xstr (4)
     → str (4)
     → "4"

他們繼續聲明:

“當在str中使用s時,它是字符串化的,因此它不是首先進行宏擴展 。但是s是xstr的普通參數,因此在xstr自身擴展之前,它已完全進行了宏擴展(請參閱參數預掃描)。當時間到達爭論的時候,它已經被宏擴展了。”

盡管這都不是具體的,但我認為您可以放心地假設x是擴展/擴展用法。

當我在宏或函數調用名稱之前使用x時,我用它來表示擴展的用法,我想我並不孤單。

在您的示例中,可以使用str來對token進行字符串化,但是應該使用xstr來進行擴展使用,即擴展宏參數並對該結果進行字符串化。 為了進行比較,當大多數情況下僅應使用一個宏而另一宏用於內部實現時,我想執行以下操作:

#define _str(token) #token
#define str(token) _str(token)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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