gpt4 book ai didi

C预处理器: stringification does not work

转载 作者:太空狗 更新时间:2023-10-29 17:10:29 24 4
gpt4 key购买 nike

我想声明一个静态常量数组,其中包含带有版本信息的字符串。

我已经有两个带有版本号的宏,我想基于它生成一个初始的 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_MAJORAPI_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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com