0

我正在处理计算机体系结构课程的 sim。我尝试用 gcc v4.5.2 用 MSYS1.1/MinGW 编译包。

制作日志:

    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 };

这个结构块有什么问题?能否请你帮忙??谢谢!

4

2 回答 2

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};.

于 2011-05-03T20:55:06.443 回答
1

在 C 中,内部结构不允许有名称,这是因为您需要在 C 中正常引用结构:

struct A {
   ...
};

struct B {
    struct A my_a;
};

因此,对于一个天真的 C 编译器来说,它是否应该期待一个变量或一个类型声明是不清楚的。

但是,在这种情况下,由于 C++ 不期望变量减速的结构前缀,因此使用 c++ 编译器它会按预期工作。

解决方案是从内部结构中删除名称,或者在另一个结构之外声明它。

于 2011-05-03T21:06:04.540 回答