大学汇编器开发:结构体定义出现‘未知类型名label’错误求助
解决“未知类型名‘label’”编译错误
你的编译错误出在label结构体的自引用成员声明上:在typedef struct label的定义内部,label* next;中的label类型别名还未生效,编译器无法识别这个类型。而你的macro结构体没有自引用成员,所以不会出现这个问题。
修改方案很简单,将结构体内部的label* next;替换为struct label* next;,修改后的完整结构体定义如下:
typedef struct label{ char name[MAX_LABEL_LENGTH]; int line; /*the line the table was defined*/ int type; int counterType; struct label* next; } label;
原理是:C语言中,struct label在结构体定义的起始处就已经被编译器识别为一个结构体类型,而label这个别名要等到整个typedef语句完成后才会生效。所以在结构体内部的自引用必须使用struct label*,而不是还未定义的别名。修改后,函数声明中的label*(比如add_label的第一个参数)可以正常使用,因为此时typedef已经完成,别名生效。
内容的提问来源于stack exchange,提问作者roeegg
相关产品推荐
相关产品推荐

