【发布时间】:2015-06-01 20:56:55
【问题描述】:
所以我想定义一个在编译时已知的结构中的数组大小。我还希望该数字可用作变量,以便以后使用。我有以下内容:
const int BANANA_ARRAY_SIZE = 10;
typedef struct
{
char bananas[BANANA_ARRAY_SIZE];
int some_other_stuff;
} banana_struct;
这个功能很好。但是,如果我将它放在一个包含在多个位置的 .h 文件中,编译器会抱怨 BANANA_ARRAY_SIZE 的重新定义(这是有道理的)。所以我需要将它声明为 extern,以便多个编译单元可以知道它。
所以,我现在有
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
有什么方法可以实现我想要的(将数组的长度存储在变量中并用于定义结构)?
编辑:
为了回应使用#defines 的建议,我宁愿不使用。
我的问题是关于如何将这个常量值存储在变量中并用于设置结构中数组的长度。如果您需要进一步的证明,假设我需要一个带有指向 int 的指针的函数。无法引用#define。
【问题讨论】:
-
请阅读我更新的评论,这是我回答的最后一条评论。这对我来说不会发生 gcc-5.1.0.
-
#define BANANA_ARRAY_SIZE 10char bananas[ BANANA_ARRAY_SIZE ]; const size_t length = BANANA_ARRAY_SIZE; -
@ryyker:这在本地范围内也不起作用,因为 VLA 必须位于块的顶层,而不是结构内部(但是,有一种使用 flex 数组的方法成员,但这将包括一些沉重的东西。