寫(xiě)了 15 行代碼,編譯報(bào)錯(cuò)竟然高達(dá) 1800 多行,這種奔潰的瞬間應(yīng)該有很多同學(xué)遇到過(guò)。
代碼分為兩塊,一個(gè)頭文件,一個(gè)源文件。
test.h
#ifndef TEST_H #define TEST_H #includesize_tlength(constchar*s) #endif
test.c
#include "test.h" #include#include #include #include int main() { printf("%d ", length("aa")); } size_t length(const char *s) { return strlen(s); }
開(kāi)始編譯,當(dāng)敲下回車(chē)的那一刻,瞬間有點(diǎn)上頭,編譯報(bào)錯(cuò)已經(jīng)超出了終端的范圍,一直往上翻到頭也沒(méi)找到編譯的命令。
我嘗試把錯(cuò)誤定向到文件中,看了一下,有 1800 多行。
難怪很多初學(xué)者只需要半天時(shí)間從入門(mén)到放棄,這么多錯(cuò)誤,根本無(wú)從下手。
先來(lái)大概分析下,提示的這些錯(cuò)誤基本都是標(biāo)準(zhǔn)頭文件里面的錯(cuò)誤,比如 stdio.h,很顯然,這是不可能的。
/usr/include/stdio.h:911:14: error: storage class specified for parameter ‘ctermid’ 911 | extern char *ctermid (char *__s) __THROW |
這個(gè)問(wèn)題,一定是跟頭文件有關(guān),而且大概率是你寫(xiě)的頭文件,影響了別人的頭文件,比如函數(shù)聲明的后面少了分號(hào)。
當(dāng) test.h 被展開(kāi)的時(shí)候,由于函數(shù)聲明后面沒(méi)有加分號(hào),導(dǎo)致其他被展開(kāi)的頭文件都不合符語(yǔ)法要求,頭文件包含的越多,報(bào)錯(cuò)也就越多。如果這個(gè)時(shí)候真的去標(biāo)準(zhǔn)頭文件里面找問(wèn)題,基本就廢了。
編譯問(wèn)題在C語(yǔ)言中應(yīng)該是最簡(jiǎn)單的問(wèn)題,現(xiàn)在的編譯器足夠智能,甚至能告訴你怎么修該。多寫(xiě)代碼,遇到的多了,就能形成條件反射,看到問(wèn)題,就能知道怎么修改。
-
代碼
+關(guān)注
關(guān)注
30文章
4924瀏覽量
72375 -
編譯
+關(guān)注
關(guān)注
0文章
682瀏覽量
34815
原文標(biāo)題:寫(xiě)了15行代碼,編譯報(bào)錯(cuò)1800多行
文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
電商API常見(jiàn)錯(cuò)誤排查指南:避免集成陷阱

RTsmart源碼編譯錯(cuò)誤,提醒我缺少文件導(dǎo)致make失敗,為什么?
手動(dòng)添加cubeMX的軟件自動(dòng)生成代碼后,編譯出現(xiàn)’rtthread.elf’:No Such File 的錯(cuò)誤怎么解決?
使用rt-thread構(gòu)建openmv的固件工程,出現(xiàn)編譯錯(cuò)誤的原因?
JDK從8升級(jí)到21的問(wèn)題集
打開(kāi)FSP配置器界面的具體步驟

評(píng)論