gpt4 book ai didi

c - 重温 C 中的字符串数组初始化

转载 作者:行者123 更新时间:2023-12-04 02:37:04 26 4
gpt4 key购买 nike

我想在普通 C 中初始化一个具有以下要求的字符串数组:

(A) 我需要头文件中的字符串,因为一些其他模块将它们用作普通字符串,所以我在头文件中声明:

extern const char* const ERRMSG_VM_0001;
extern const char* const ERRMSG_VM_0002;
extern const char* const ERRMSG_VM_0003;
extern const char* const ERRMSG_VM_0004;

在源文件中:

const char* const ERRMSG_VM_0001 = "[VM-001] some text ";
const char* const ERRMSG_VM_0002 = "[VM-002] more text ";
const char* const ERRMSG_VM_0003 = "[VM-003] other text ";
const char* const ERRMSG_VM_0004 = "[VM-003] and even more";

(B) 我也需要这些字符串在一个数组中,所以我在(相同的)源(如上)中尝试:

static const char* error_table[4] =
{
ERRMSG_VM_0001,
ERRMSG_VM_0002,
ERRMSG_VM_0003,
ERRMSG_VM_0004
};

显然,编译器会报错 error: initializer element is not constant ...所以现在我想知道如何以纯 C 方式实现这一点,而不是 C++(这类似于 Tricky array Initialization 但不一样)。

最佳答案

编译器能够找到匹配的字符串文字并优化二进制文件。 (这可能是一个选项)

我建议只声明定义并创建一个常量

#define ERRMSG_VM_0001 "[VM-001] some text "
...

static const char* error_table[4] =
{
ERRMSG_VM_0001,
ERRMSG_VM_0002,
ERRMSG_VM_0003,
ERRMSG_VM_0004
};

现在可以了。生成的二进制代码将是您想要的。

关于c - 重温 C 中的字符串数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20654236/

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