- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想声明一个静态常量数组,其中包含带有版本信息的字符串。
我已经有两个带有版本号的宏,我想基于它生成一个初始的 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 做同样的事情时,它起作用了。
预先感谢您的帮助。
更新:
事实证明,API_VERSION_MAJOR 和 API_VERSION_MINOR 宏在源文件中是不可见的。我只是错过了包含。很简单。太简单而不明显。
请注意,在这种情况下没有任何警告输出。
最佳答案
那么您定制的 GCC 4.4.1 ARM 交叉编译器有问题。
如果您自己编译它,有时它有助于禁用一些过于激进的优化选项,这些选项可能尚未解决所有问题。
跳出框框思考,您可以调整源代码来避免问题:
#define API_VERSION_MAJOR "4"
#define API_VERSION_MINOR "47"
static const char OSAPIVersion[] = API_VERSION_MAJOR "." API_VERSION_MINOR;
或者在运行时构建字符串:
#define API_VERSION_MAJOR 4
#define API_VERSION_MINOR 47
static char OSAPIVersion[8];
int main(void) {
snprintf (OSAPIVersion, sizeof OSAPIVersion, "%d.%d", API_VERSION_MAJOR, API_VERSION_MINOR);
}
关于C预处理器: stringification does not work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36764885/
我想声明一个静态常量数组,其中包含带有版本信息的字符串。 我已经有两个带有版本号的宏,我想基于它生成一个初始的 const 字符串。 我正在尝试使用描述的方法 here ,但它无法像预期的那样使用可用
当使用 C 预处理器时,可以像这样对宏参数进行字符串化: #define TO_STRING(x) "a string with " #x 等使用时,结果如下: TO_STRING(test) 将扩展
我有如下包含字符串化的 C 代码。 #define xstr(s) str(s) #define str(s) #s #define foo 4 现在 xstr (foo) 正确地计算为“4”。 但是
在 CPAN 模块的文档中 DateTime我发现了以下内容: Once you set the formatter, the overloaded stringification method wi
它看起来像 maxpairs不喜欢在具有未定义值的列表上调用: > my @foo; @foo[2] = 4; say @foo.maxpairs; Use of uninitialized valu
我是一名优秀的程序员,十分优秀!