7
我想聲明一個靜態常量數組,其中包含帶有版本信息的字符串。C預處理器:字符串化不起作用
我已經有兩個版本號的宏,我想根據它生成一個初始的const字符串。
我正在嘗試使用here所描述的方法,但它不像預期的那樣可用編譯器工具。
我的代碼是未來:
#define API_VERSION_MAJOR 4
#define API_VERSION_MINOR 47
#define _STR(x) #x
#define STR(x) _STR(x)
static const char OSAPIVersion[] =
STR(API_VERSION_MAJOR) "." STR(API_VERSION_MINOR) ;
當我打印的陣列,它的值是「API_VERSION_MAJOR.API_VERSION_MINOR」 的代替「4.47」。
我使用定製的GCC 4.4.1 ARM交叉編譯器。
當我在我的PC上用Cygwin GCC 4.5.3做同樣的工作時,
非常感謝您的幫助。
UPDATE:
原來API_VERSION_MAJOR和API_VERSION_MINOR宏是在源文件中unvisible。我只是錯過了包括。很簡單。太簡單了,顯而易見。
請注意,在這種情況下沒有任何警告輸出。
完全無關的問題,但不要使用具有前導下劃線和大寫字母的符號名稱,因爲這些名稱是爲「實現」(即編譯器和標準庫)保留的。 –
剛剛在Ubuntu 12.04和14.04上嘗試了gcc 4.4,4.8和4.9,i386,x64和cross-arm的代碼片段 - 按預期工作(使用'compiler -E testfile.c')。我認爲問題在別的地方。這是編譯器/預處理器中的一個主要缺陷,否則就無法工作。 – Dummy00001
從源文件複製並粘貼發佈的代碼? – LPs