[英]Defining a macro to add the prefix 0x to a hex string literal
我試圖讓一個宏在我的 c 程序中工作,以將0x
添加到十六進制文字,如下所示:
#define BUILD ABCD0000
#define CONCAT(m, n) m ## n
#define HEX(x) CONCAT(0x, x)
const uint32_t Id = HEX (BUILD);
我收到此編譯器錯誤:整數常量上的后綴“x”無效。 任何人都可以幫忙嗎?
這不是您期望的答案,但很抱歉,我必須:不要這樣做!!
為什么不 ?
HEX(x)
導致認為會將 x 轉換為十六進制,而它要求參數已經是十六進制的。HEX(ABC00+10)
會將第一部分采用十六進制,但第二部分仍為十進制。 為了讓宏在表達式中表現良好,訣竅是將參數的每次使用都括在括號之間,但這對於連接是不可能的。0x
:它出現在那里的很多代碼中,在編譯器消息中,在調試器中,等等......所以訓練你的眼睛而不是試圖逃避。話雖如此,在 Godbolt 上對幾個編譯器版本進行了測試后,我無法重現您的錯誤。 所以如果你想繼續:
x
展開?現在已經解決了。 我讓它在另一個編譯器上工作,然后意識到它實際上為 BUILD 值生成了一個空白,即只是 #define BUILD
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.