expected declaration specifiers of xx before xx 产生该错误的原因以及解决方案
原因
1.这种错误,一般是头文件include混乱造成的。
2.头文件交叉调用导致
3.报错行函数使用时形参或类型多了一些标点符号
4.这是我遇见的错误:结构体在使用时没有使用typedef,然后在编译过程中引用该结构体所在头文件时将头文件放在了稍后位置进行编译,这就导致一个结果:当编译器编译到我所使用的函数时并没有编译到该结构体所在头文件。
解决方案
1.在引用时一般先写#include “xx.h” ,再引用#include <xx.h>
2.例如你在a.h声明了x,在b.h中使用了x,结果又在a.h中引用了b.h从而产生了交叉引用。
3.完善函数定义,将报错行函数根据需要修改
4.可以将声明该结构体的头文件放在前面编译,或者使用typedef声明结构体。
#define是预处理指令,typedef是在编译时处理的,编译预处理和编译时处理有什么不同。
编译预处理会在编译前处理好,比如#define N 7 则遇到N的地方都直接用7替换,然后在进行整个程序的编译,typedef则是在编译时遇到你所定义的东西,再回到typedef语句中寻找解释,继续编译下去的。(碰到一个,回去处理一个,不是一下子处理好)
关于typedef语法可以看
typedefine语法