gpt4 book ai didi

c - 跨文件基于 const int 构造成员数组大小

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

所以我想在编译时已知的结构中定义数组的大小。我还希望该数字可用作变量以便以后使用。我有以下内容:

const int BANANA_ARRAY_SIZE = 10;

typedef struct
{
char bananas[BANANA_ARRAY_SIZE];
int some_other_stuff;
} banana_struct;

这个功能很好。但是,如果我将它放在包含在多个位置的 .h 文件中,编译器会提示 BANANA_ARRAY_SIZE 的重新定义(这是有道理的)。所以我需要将它声明为外部,以便多个编译单元可以知道它。

所以,我现在有

extern const int BANANA_ARRAY_SIZE;

typedef struct
{
//.. same as before
} banana_struct;

在我的实现文件中

const int BANANA_ARRAY_SIZE = 10;

但是现在编译器不再让我定义结构体了

fields must have a constant size: variable length array in structure

有什么方法可以实现我想要的(将数组的长度存储在变量中并用于定义结构)?

编辑:

为了响应使用 #define 的建议,我宁愿不用。

我的问题是关于如何将这个常量值存储在变量中,并用于设置结构中数组的长度。如果您需要进一步的理由,假设我需要一个函数,它接受一个指向 int 的指针。无法引用 #define。

最佳答案

在 C 语言中,const 对象不是常量。您不能使用它来声明非 VLA 数组。你的第一个声明不能用 C 语言编译,这使得你所说的“功能正常”是什么意思不清楚。

查看此处了解更多详情:Shall I prefer constants over defines?

在您的情况下,您只能使用 #defineenum 常量。如果您还想创建指向该值的指针,则必须根据需要另外声明一个具有相同值的 const 对象,可以是全局的也可以是局部的。但是您不能在非 VLA 数组声明中使用它。相反,您将不得不使用 #defineenum 常量。例如

// In .h file
#define BANANA_ARRAY_SIZE 10
extern const int BANANA_ARRAY_SIZE_OBJ;

// In .c file
const int BANANA_ARRAY_SIZE_OBJ = BANANA_ARRAY_SIZE;

关于c - 跨文件基于 const int 构造成员数组大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30583136/

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