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