0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【编译问题】很诡异的编译报错expected declaration or statement at end of input

嵌入式物联网开发 来源:嵌入式物联网开发 作者:嵌入式物联网开发 2022-12-07 08:58 次阅读

**【C语言进阶】很诡异的编译报错expected declaration or statement at end of input **

一个很诡异的编译报错,不仔细还真发现不了!

1 问题现场

有一天我在调试代码的时候,刚刚代码还好好的,突然来了一个报错:

recan@ubuntu:~/11111$ gcc -o test 111/222/333/444/555/666/777/888/999/test.c 
 111/222/333/444/555/666/777/888/999/test.c: In function ‘test3’:
 111/222/333/444/555/666/777/888/999/test.c:37:1: error: expected declaration or statement at end of input
    37 | }
       | ^

这就让我很纳闷,咋回事呢?

2 复现代码

我们来看下当时的代码,为了说明问题,我把无关代码都删除了,仅保留有效代码:

#include int test1(void)
 {
 return 0;
 }
 ​
 int test2(void)
 {
 return 0;
 }
 ​
 ​
 int test3(void)
 {
 return 0;
 ​
 ​
 int test4(void)
 {
 return 0;
 }
 ​
 ​
 int test5(void)
 {
 return 0;
 }
 ​
 ​
 int main(void)
 {
     printf("__FILE__: %s\\n", __FILE__);
 return 0;
 }
 ​

示例代码很简单,就是一堆的函数,然后啥也没干。

3 编译分析

**根据编译报错,我们看下,提示 **line37行 报错了? 37行不是文件的结束吗?

**报错的英文对应的中文含义是:**错误:输入末尾应为声明或语句

很显然不是37行有问题吗?我的main函数肯定没有问题啊?

那么有没有可能是前面的函数有问题啊?

**原来是 line16 中的test3函数,少了结尾的 **} 大括号,导致了编译报错的蔓延。

当然,解决这个编译问题也很简单,把test函数的大括号补上即可。

4 小小总结

  • 排查编译问题,不要仅局限于报错的行号,找找上下文,可能别人的错误导致了你的错误;
  • **误删一行 **} 大括号,不经意间就报错了;
  • 代码管理,一定要用起来;这种情况,实在不行就比对下代码,很容易就发现问题了。

5 更多分享

[架构师李肯]

架构师李肯全网同名 ),一个专注于嵌入式IoT领域的架构师。有着近10年的嵌入式一线开发经验,深耕IoT领域多年,熟知IoT领域的业务发展,深度掌握IoT领域的相关技术栈,包括但不限于主流RTOS内核的实现及其移植、硬件驱动移植开发、网络通讯协议开发、编译构建原理及其实现、底层汇编及编译原理、编译优化及代码重构、主流IoT云平台的对接、嵌入式IoT系统的架构设计等等。拥有多项IoT领域的发明专利,热衷于技术分享,有多年撰写技术博客的经验积累,连续多月获得RT-Thread官方技术社区原创技术博文优秀奖,荣获[CSDN博客专家]、[CSDN物联网领域优质创作者]、[2021年度CSDN&RT-Thread技术社区之星]、[2022年RT-Thread全球技术大会讲师]、[RT-Thread官方嵌入式开源社区认证专家]、[RT-Thread 2021年度论坛之星TOP4]、[华为云云享专家(嵌入式物联网架构设计师)]等荣誉。坚信【知识改变命运,技术改变世界】!

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7539

    浏览量

    130455
  • 编译
    +关注

    关注

    0

    文章

    622

    浏览量

    32436
  • RT-Thread
    +关注

    关注

    31

    文章

    1165

    浏览量

    38973
收藏 人收藏

    评论

    相关推荐

    RX231系列MCU旧工程打开编译报错问题解决方法

    RX231系列MCU旧工程打开编译报错,使用新版本为Renesas e² studio,Version: 2023-04 (23.4.0)
    的头像 发表于 01-03 12:32 596次阅读
    RX231系列MCU旧工程打开<b class='flag-5'>编译</b><b class='flag-5'>报错</b>问题解决方法

    mplab编程C,程序编译不出来

    declaration specifiers before 'main'interrupts.c:43:1: error: expected '{' at end of input
    发表于 08-05 15:17

    DSP2812 ccs3.3编译报错At end of source: error: expected a "}",但实际上没少“}”

    急救,请诸位大神解疑释难:采用DSP2812,在 ccs3.3环境下编译报错At end of source: error: expected a "}",但实际上没少“}”
    发表于 06-21 11:49

    DSP2812在ccs3.3环境下报错At end of source: error: expected a "}",但实际上没少“}”

    急救,请诸位大神解疑释难:采用DSP2812,在 ccs3.3环境下编译报错At end of source: error: expected a "}",但实际上没少“}”
    发表于 06-21 11:55

    CC3200 应用示例中编译报错

    CC3200 应用示例中 wlan_station_Release编译报错“OSI_OK,” expected an identifier在枚举定义时报错
    发表于 03-22 13:50

    请问数组定义报错:#19 extra text after expected end of number是什么原因造成的?如何解决?

    本帖最后由 一只耳朵怪 于 2018-6-14 08:48 编辑 我用CCS6.0定义了一个数组,编译时报这个错误:#19 extra text after expected end
    发表于 06-13 07:03

    ccs3.3 if 语句的嵌套编译时出现"guochongguofang.c", line 30: error: expected a statement

    ; ] ] ] ] ]编译时出现"guochongguofang.c", line 30: error: expected a statement ,请问是什么引起的,应该怎么解决? 就是带有else的地方
    发表于 08-22 06:54

    进入buildroot-2016.11手动编译 make 全部包提示 libgpgme-1.7.1 包无法编译通过是为什么?

    ',' or ';' before '{' token{^context.cpp:1645:1: error: expected '}' at end of input}^make[6
    发表于 01-13 08:47

    编译Micropython的时候遇到implicit declaration of function 'gpio_pad_select_gpio'的问题怎么搞?

    :../mphalport.h: In function 'mp_hal_pin_input':../mphalport.h:85:5: error: implicit declaration
    发表于 02-16 06:09

    吴鉴鹰总结的Keil编译常见问题(一)

    吴鉴鹰总结的Keil编译常见问题,例如:.error: #18: 6.error: #18: expected a ")" 如果是出现在c 文件中 多半是因为少了一个")"或者错误行有编译器不识别的字符 如果出现在头文件中
    发表于 07-22 15:31 0次下载

    IAR编译问题

    的,就好比组1有.h文件但是组2 没有然后编译就会报错。解决办法就是将相关.h文件复制到相关的所有文件夹里面问题二:修改好了编译报错,调试的时候不能单步运行,也打不了断点,这时候需要
    发表于 12-03 10:36 8次下载
    IAR<b class='flag-5'>编译</b>问题

    CCS编译器 报 error: expected a “)“ 的错误

    使用CCS 进行m430f5529的开发过程中,编译器报error: expected a “)” 的错误。当时以为是自己少了括号,但是认真检查后发现无误,经过反复的尝试,发现只要函数的输入参数
    发表于 12-16 16:56 14次下载
    CCS<b class='flag-5'>编译</b>器 报 error: <b class='flag-5'>expected</b> a “)“ 的错误

    error:expected identifier before ‘(‘ token,结构体指针宏定义错误

    error:expected identifier before ‘(’ token,结构体指针宏定义错误编译时弹出标题所示错误,一般为宏定义里有与其他地方重复的常量符号。找出名字重复的符号并修改
    发表于 01-13 15:42 11次下载
    error:<b class='flag-5'>expected</b> identifier before ‘(‘ token,结构体指针宏定义错误

    VScode编译器如何配置C/C++编译环境

    昨天有伙伴私信我,为什么我用C语言写的hello world几行代码,在编译器里面报错了呢?
    的头像 发表于 03-16 08:38 4994次阅读

    【GCC编译运行报错】error while loading

    【GCC编译】运行编译后的程序报错 error while loading shared libraries: lib*.so: cannot open shared object file
    的头像 发表于 08-26 13:14 3221次阅读
    【GCC<b class='flag-5'>编译</b>运行<b class='flag-5'>报错</b>】error while loading