2011-12-28 76 views
1

是否可以使用C預處理器宏來生成以下字符串,其中size是宏的sizeof的結果?將sizeof()offsetof()宏的結果嵌入到const char數組中?

 
const char testXmlElement [] = "< xs:element name="count" size="4" \>"; 

使用字符串化宏將生成結果size =「sizeof(int)」,而不是所需的結果size =「4」。

 
#define xstr(s) str(s) 
#define str(s) #s 
const char testXmlElement[] = 
"&ltelement size=\"" 
xstr(sizeof(int)) 
"\"" 
" \\>"; 

我的目的是在同時使用的sizeof()和offsetof()宏的嵌入式微控制器應用程序來創建一個XML架構。生成的模式將用於將XML反序列化爲嵌套的C數據結構。

在此先感謝,

回答

2

我不這麼認爲。預處理器在編譯器之前運行,編譯器解釋sizeof

+0

對,'sizeof'是一個操作符,而不是宏。 'offsetof'是一個宏,但它擴展爲一個整型常量表達式,預處理器可能無法評估。對'offsetof()'的結果進行字符串化將爲您提供一個適度複雜的表達式,而不是整數字面值。 –

+0

謝謝你幫助我理解並指出sizeof是一個運營商。 –