struct member数组大小基于跨文件的const int

Phi*_*ldo 5 c arrays struct

所以我希望在编译时知道结构中数组大小的定义.我也希望这个号码可以作为变量使用,以方便以后使用.我所拥有的是以下内容:

const int BANANA_ARRAY_SIZE = 10;

typedef struct
{
  char bananas[BANANA_ARRAY_SIZE];
  int some_other_stuff;
} banana_struct;
Run Code Online (Sandbox Code Playgroud)

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

所以,我现在有

extern const int BANANA_ARRAY_SIZE;

typedef struct
{
  //.. same as before
} banana_struct;
Run Code Online (Sandbox Code Playgroud)

在我的实施文件中

const int BANANA_ARRAY_SIZE = 10;
Run Code Online (Sandbox Code Playgroud)

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

fields must have a constant size: variable length array in structure
Run Code Online (Sandbox Code Playgroud)

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

编辑:

为了回应使用#defines 的建议,我宁愿不这样做.

我的问题是如何将这个常量值存储在变量中,还用于设置结构中数组的长度.如果你需要进一步的理由,假设我需要一个带有指向int的指针的函数.不能参考#define.

AnT*_*AnT 7

在C语言中,const对象不是常量.您不能使用它来声明非VLA数组.你的第一个声明不能用C语言编写,这使得你不清楚你的意思是"函数正常".

请参阅此处了解更多详细信息:我是否更喜欢常量而不是定义?

在您的情况下,您被限制为#define或者enum常量.如果您还想创建指向该值的指针,则还必须const根据需要在全局或本地声明具有相同值的对象.但是你将无法在非VLA数组声明中使用它.相反,您将不得不使用#define或enum常量.例如

// 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;
Run Code Online (Sandbox Code Playgroud)