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