gpt4 book ai didi

C 使用现有的 const 变量初始化 const struct 成员

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

我在 gcc 下使用默认的 C。

我的代码:

typedef struct _OpcodeEntry OpcodeEntry;

//

struct _OpcodeEntry
{
unsigned char uOpcode;
OpcodeMetadata pMetadata;
};

//

const OpcodeMetadata omCopyBytes1 = { 1, 1, 0, 0, 0, 0, &CopyBytes };

const OpcodeEntry pOpcodeTable[] =
{
{ 0x0, omCopyBytes1 },
};

错误:

error: initializer element is not constant
error: (near initialization for 'pOpcodeTable[0].pMetadata')

如果我将 omCopyBytes1 更改为上面行中实际设置的值,则代码可以正常编译。我做错了什么?

最佳答案

您不能使用omCopyBytes1 来初始化pOpcodeTable[] 数组的成员,因为omCopyBytes1 是一个运行时常量变量,不是编译时常量。 C 中的聚合初始值设定项必须是编译时常量,这就是您帖子中的代码无法编译的原因。

作为一个变量,omCopyBytes1 在内存中有自己的位置,它被初始化为一个项目数组。您可以通过指针使用此类变量,如下所示:

struct _OpcodeEntry {
unsigned char uOpcode;
const OpcodeMetadata *pMetadata;
};
...
const OpcodeEntry pOpcodeTable[] = {
{ 0x0, &omCopyBytes1 }, // This should work
};

或者,您可以将其设为预处理器常量:

#define omCopyBytes1 { 1, 1, 0, 0, 0, 0, &CopyBytes }

如果以这种方式定义,omCopyBytes1 将不再是一个变量:它将是一个预处理器定义,在编译器完成之前就消失了。我不建议使用预处理器方法,但如果您必须这样做,它就在那里。

关于C 使用现有的 const 变量初始化 const struct 成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15627657/

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