在C混乱的结构

时间:2012-10-02 20:03:39

标签: c struct typedef

我有一个以我正在调用stringtable的结构开头的c文件,看起来像这样

struct stringtable {
   int table[];
   int numElements = 15;
};

我有一个标题,它有这个typedef

typedef stringtable *stringtable_ref;

当我使用gcc编译时,我得到错误: 预期的标识符或'('''''之前的标记 在'int'之前预期':'

像我已经声明结构错误一样。我之前在C中完成了结构,所以我的问题是:我是否在宣布我的结构时犯了错误?分号前是否需要标记?是否只允许某些地方申报结构?

3 个答案:

答案 0 :(得分:1)

struct stringtable {
   int table[];
   int numElements = 15;
};

int table[];这样的灵活数组成员只能是struct last 成员(至少还有一个成员)。

并且您无法在struct声明中为成员分配默认值,C不支持该声明。

答案 1 :(得分:1)

除非您的结构中有static成员,否则您无法在声明时初始化成员。

您需要在成员初始化之前创建结构的实例:

 struct stringtable str_table;
 str_table.numElements = 15; 
 //etc

答案 2 :(得分:0)

我还希望您在标题typedef struct stringtable *stringtable_ref

中需要