我出现此问题的原因是 在两个函数之间声明了结构体。
今天用gcc 编译一个文件出现如下错误:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘<’ token
语句都快注释完了,编译还是通不过,最后检查include,才发现,原来是include漏了致命重要的”#“号!!
我写成如下形式了:
include <stdio.h>
......
浪费了两分钟。看来还是那句话,细心写代码更胜于快速写完再调试修改。
如果函数定义时,写成如下形式,也会给出同样的提示:
void printSpace(int n); //注意这里应该是一个“{”,不小心或者只是习惯性地加一个“;”号
int i=0;
....(你的函数内容)
}
百度了一下,这种错误的提示的提问者还不少,故写出来,以供参考
因为将CRC校验代码加入时,我修改了Makefile文件;而且,修改Makefile文件我是将拷贝别的文件的依赖关系来进行修改的。由于我只修改了依赖文件(在这里也就是.c文件)的文件名,而没有修改目标文件(在这里也就是.o文件)的文件名。所以导致出现了上述的错误,将目标文件名修改下即可通过编译,而不会出现上述的错误。
引申:以下的这些错误原因是网上看到的,整理一下
1.原因:用gcc编译cpp文件。解决:用g++编译cpp文件
注:用Makefile很容易误用gcc的,类似问题遇到过无数次……还有连接的时候也是,有些版本的make喜欢用gcc连接,直接挂掉。我通常都在头部加一句CC=g++ CFLAGS=-x c,感觉挺好用。
2.原因:包含头文件时缺少“#”或者函数“{”与“}”没有成对的出现
3.原因:新加的内容与头文件冲突
注:error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘XXX’,如果XXX是类名,那么几乎可以肯定地说是你的C文件里包含了C++头文件。楼主遇到的正是这个问题。建议不要使用10楼的方法。最好的方法是,不要去包含c++头文件!如果你的C文件要用到类,干脆直接将C文件改成CPP文件得了。缺少标点符号和全半角的提示是不一样的。
4.tyepdef int (*psum)(int,int);
typedef拼写错误,如上,报的错误: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘int’
最后看完大家记得关注我的博客,后续持续有更新!有问题可以交流。