我正在处理用于计算机体系结构课程的sim。我尝试使用gcc v4.5.2编译包含MSYS1.1 / MinGW的包。
Makelog:
In file included from
sim-outorder.c:107:0: bpred.h:214:5:
error: expected specifier-qualifier-list before 'uint'
...
make: *** [sim-outorder.o] Error 1
我检查了bpred.h中的第214行,有一个嵌套的结构定义:
208 /* branch predictor update information */
209 struct bpred_update {
210 char *pdir1; /* direction-1 predictor counter */
211 char *pdir2; /* direction-2 predictor counter */
212 char *pmeta; /* meta predictor counter */
213 struct dir{ /* predicted directions */
214 uint bimod : 1; /* bimodal predictor */
215 uint twolev : 1; /* 2-level predictor */
216 uint meta : 1; /* meta predictor (0..bimod / 1..2lev) */
217 } dir;
218 };
这个结构块有什么问题? 能否请你帮忙?? 谢谢!
答案 0 :(得分:3)
我相信你不允许命名内部结构:
208 /* branch predictor update information */
209 struct bpred_update {
210 char *pdir1; /* direction-1 predictor counter */
211 char *pdir2; /* direction-2 predictor counter */
212 char *pmeta; /* meta predictor counter */
213 struct { /* predicted directions */
/****** ^^^^ --- NO NAME HERE -- THIS IS WHAT YOU MUST CHANGE */
214 uint bimod : 1; /* bimodal predictor */
215 uint twolev : 1; /* 2-level predictor */
216 uint meta : 1; /* meta predictor (0..bimod / 1..2lev) */
217 } dir;
218 };
我怀疑这是因为“说明符 - 限定符列表”听起来像是struct dim = {0};
之类的标记。
答案 1 :(得分:1)
在C中,不允许内部结构具有名称,这是由于您需要如何在C中引用结构:
struct A {
...
};
struct B {
struct A my_a;
};
因此,对于一个天真的C编译器来说,它是否应该期待变量或类型声明是不明确的。
然而,在这种情况下,使用c ++编译器它可以按预期工作,因为C ++不期望结构前缀用于可变减速。
解决方案是从内部结构中删除名称,或者在其他结构之外声明它。