编译错误:error: expected '=', ',', ';', 'asm' or '__attribute__' before...

我出现此问题的原因是 在两个函数之间声明了结构体。


今天用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’


  • 32
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
这个错误是由于在main.c文件的第4行缺少了一个语法元素导致的。根据引用\[1\]中的错误信息,编译器期望在这个位置看到一个"="、","、";"、"asm"或"attribute"等语法元素,但是却遇到了一个"{"。这个错误可能是由于在前面的代码中缺少了某个语法元素,导致编译器无法正确解析这个"{"。你可以检查一下前面的代码,看看是否有遗漏的语法元素。 #### 引用[.reference_title] - *1* [main.c: In function ‘hello’: main.c:3:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__...](https://blog.csdn.net/qq_31648921/article/details/100593892)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [c: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token](https://blog.csdn.net/qq_36428903/article/details/126007464)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Keil C中 error C141: syntax error near ‘=‘, expected ‘__asm](https://blog.csdn.net/Amber741/article/details/121680918)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值