**【C語(yǔ)言進(jìn)階】很詭異的編譯報(bào)錯(cuò)expected declaration or statement at end of input **
一個(gè)很詭異的編譯報(bào)錯(cuò),不仔細(xì)還真發(fā)現(xiàn)不了!
1 問(wèn)題現(xiàn)場(chǎng)
有一天我在調(diào)試代碼的時(shí)候,剛剛代碼還好好的,突然來(lái)了一個(gè)報(bào)錯(cuò):
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 復(fù)現(xiàn)代碼
我們來(lái)看下當(dāng)時(shí)的代碼,為了說(shuō)明問(wèn)題,我把無(wú)關(guān)代碼都刪除了,僅保留有效代碼:
?
#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;
}
?
示例代碼很簡(jiǎn)單,就是一堆的函數(shù),然后啥也沒(méi)干。
3 編譯分析
**根據(jù)編譯報(bào)錯(cuò),我們看下,提示 **line37行 報(bào)錯(cuò)了? 37行不是文件的結(jié)束嗎?
**報(bào)錯(cuò)的英文對(duì)應(yīng)的中文含義是:**錯(cuò)誤:輸入末尾應(yīng)為聲明或語(yǔ)句
很顯然不是37行有問(wèn)題嗎?我的main函數(shù)肯定沒(méi)有問(wèn)題???
那么有沒(méi)有可能是前面的函數(shù)有問(wèn)題?。?/strong>
**原來(lái)是 line16 中的test3函數(shù),少了結(jié)尾的 **} 大括號(hào),導(dǎo)致了編譯報(bào)錯(cuò)的蔓延。
當(dāng)然,解決這個(gè)編譯問(wèn)題也很簡(jiǎn)單,把test函數(shù)的大括號(hào)補(bǔ)上即可。
4 小小總結(jié)
- 排查編譯問(wèn)題,不要僅局限于報(bào)錯(cuò)的行號(hào),找找上下文,可能別人的錯(cuò)誤導(dǎo)致了你的錯(cuò)誤;
- **誤刪一行 **} 大括號(hào),不經(jīng)意間就報(bào)錯(cuò)了;
- 代碼管理,一定要用起來(lái);這種情況,實(shí)在不行就比對(duì)下代碼,很容易就發(fā)現(xiàn)問(wèn)題了。
5 更多分享
[架構(gòu)師李肯]
架構(gòu)師李肯 ( 全網(wǎng)同名 ),一個(gè)專注于嵌入式IoT領(lǐng)域的架構(gòu)師。有著近10年的嵌入式一線開(kāi)發(fā)經(jīng)驗(yàn),深耕IoT領(lǐng)域多年,熟知IoT領(lǐng)域的業(yè)務(wù)發(fā)展,深度掌握IoT領(lǐng)域的相關(guān)技術(shù)棧,包括但不限于主流RTOS內(nèi)核的實(shí)現(xiàn)及其移植、硬件驅(qū)動(dòng)移植開(kāi)發(fā)、網(wǎng)絡(luò)通訊協(xié)議開(kāi)發(fā)、編譯構(gòu)建原理及其實(shí)現(xiàn)、底層匯編及編譯原理、編譯優(yōu)化及代碼重構(gòu)、主流IoT云平臺(tái)的對(duì)接、嵌入式IoT系統(tǒng)的架構(gòu)設(shè)計(jì)等等。擁有多項(xiàng)IoT領(lǐng)域的發(fā)明專利,熱衷于技術(shù)分享,有多年撰寫技術(shù)博客的經(jīng)驗(yàn)積累,連續(xù)多月獲得RT-Thread官方技術(shù)社區(qū)原創(chuàng)技術(shù)博文優(yōu)秀獎(jiǎng),榮獲[CSDN博客專家]、[CSDN物聯(lián)網(wǎng)領(lǐng)域優(yōu)質(zhì)創(chuàng)作者]、[2021年度CSDN&RT-Thread技術(shù)社區(qū)之星]、[2022年RT-Thread全球技術(shù)大會(huì)講師]、[RT-Thread官方嵌入式開(kāi)源社區(qū)認(rèn)證專家]、[RT-Thread 2021年度論壇之星TOP4]、[華為云云享專家(嵌入式物聯(lián)網(wǎng)架構(gòu)設(shè)計(jì)師)]等榮譽(yù)。堅(jiān)信【知識(shí)改變命運(yùn),技術(shù)改變世界】!
審核編輯:湯梓紅
-
C語(yǔ)言
+關(guān)注
關(guān)注
183文章
7634瀏覽量
143916 -
編譯
+關(guān)注
關(guān)注
0文章
682瀏覽量
34774 -
RT-Thread
+關(guān)注
關(guān)注
32文章
1496瀏覽量
43514
發(fā)布評(píng)論請(qǐng)先 登錄
RX231系列MCU舊工程打開(kāi)編譯報(bào)錯(cuò)問(wèn)題解決方法

編譯例程pipeline_bt_source失敗怎么解決?
STM32CUBEIDE編譯報(bào)error: expected identifier or \'(\' before \'__asm\'怎么解決?
mplab編程C,程序編譯不出來(lái)
DSP2812 ccs3.3編譯報(bào)錯(cuò)At end of source: error: expected a "}",但實(shí)際上沒(méi)少“}”
DSP2812在ccs3.3環(huán)境下報(bào)錯(cuò)At end of source: error: expected a "}",但實(shí)際上沒(méi)少“}”
CC3200 應(yīng)用示例中編譯報(bào)錯(cuò)
請(qǐng)問(wèn)數(shù)組定義報(bào)錯(cuò):#19 extra text after expected end of number是什么原因造成的?如何解決?
進(jìn)入buildroot-2016.11手動(dòng)編譯 make 全部包提示 libgpgme-1.7.1 包無(wú)法編譯通過(guò)是為什么?
吳鑒鷹總結(jié)的Keil編譯常見(jiàn)問(wèn)題(一)
IAR編譯問(wèn)題

CCS編譯器 報(bào) error: expected a “)“ 的錯(cuò)誤

error:expected identifier before ‘(‘ token,結(jié)構(gòu)體指針宏定義錯(cuò)誤

VScode編譯器如何配置C/C++編譯環(huán)境
【GCC編譯運(yùn)行報(bào)錯(cuò)】error while loading

評(píng)論