我想声明一个静态const数组,其中包含带有版本信息的字符串.
我已经有两个带版本号的宏,我想基于它生成一个初始的const字符串.
我正在尝试使用此处描述的方法,但它不能像预期的可用编译器工具那样工作.
我的代码是下一个:
#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) ;
Run Code Online (Sandbox Code Playgroud)
当我打印数组时,其值为"API_VERSION_MAJOR.API_VERSION_MINOR"而不是"4.47".
我使用定制的GCC 4.4.1 ARM交叉编译器.
当我在使用Cygwin GCC 4.5.3的PC上执行相同操作时,它可以正常工作.
预先感谢您的帮助.
更新:
事实证明,API_VERSION_MAJOR和API_VERSION_MINOR宏在源文件中是不可见的.我错过了包括.很简单.显而易见太简单了.
请注意,在这种情况下没有任何警告输出.
只是想知道链接描述文件中的此类结构(对于text、data、rodata、bss等)有什么区别:
.data :
{
*(.data)
}
.data :
{
*(.data*)
}
.data :
{
*(.data.*)
}
Run Code Online (Sandbox Code Playgroud)
在所有情况下,我们都会从所有目标文件中收集数据部分,但细节决定成败。
快速测试表明映射文件中的地址不同,进而影响可执行文件的大小。
我试图在ld 文档中查找信息,但什么也没找到(或者只是错过了)。
我想这应该是非常简单的事情(所谓的显而易见)。
任何想法都将受到高度赞赏。