我正在处理计算机体系结构课程的模拟学习。我尝试用MSYS1.1/MinGW编译包,用的是gcc v4.5.2。
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 };这个结构块有什么问题?你能帮帮忙吗?谢谢!
发布于 2011-05-04 04:55:06
我认为不允许您命名内部结构:
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};之类的东西的一部分。
发布于 2011-05-04 05:06:05
在C中,内部结构不允许有名字,这是因为你需要在C中正常引用结构:
struct A {
...
};
struct B {
struct A my_a;
};因此,对于一个朴素的C编译器来说,不清楚它是否应该是一个变量,或者是一个类型声明。
然而,在这种情况下,由于c++不需要变量减速的结构前缀,所以使用C++编译器可以像您期望的那样工作。
解决方案是从内部结构中删除该名称,或者在其他结构外部声明该名称。
https://stackoverflow.com/questions/5875503
复制相似问题