資源描述:
《gcc編譯c問題》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在行業(yè)資料-天天文庫。
1、1、LinuxC語言編程錯誤解決之“warning:the`gets'functionisdangerousandshouldnotbeused.問題出在程序中使用了getsLinux下gcc編譯器不支持這個函數(shù),解決辦法是使用fgetsfgets()函數(shù)的基本用法為:fgets(char*s,intsize,FILE*stream);/*代碼實現(xiàn)*/#includeintmain(){charcrack8[20];printf("輸入任意字符:");fgets(crack8,20,stdin);//stdin意思是鍵盤輸入fputs
2、(crack8,stdout);//stdout輸出return0;}2、邏輯錯誤與語法錯誤在編程時,出現(xiàn)的錯誤可能有邏輯錯誤和語法錯誤兩種。這兩種錯誤的發(fā)生原因和處理方法是不同的。本節(jié)將講述這兩種錯誤的處理方法。邏輯錯誤指的是程序的設計思路發(fā)生了錯誤。這種錯誤在程序中是致命的,程序可能正常編譯通過,但是結(jié)果是錯誤的。當程序正常運行而結(jié)果錯誤時,一般都是編程的思路錯誤。這時,需要重新考慮程序的運算方法與數(shù)據(jù)處理流程是否正確。語法錯誤:語法錯誤指的是程序的思路正確,但是在書寫語句時,發(fā)生了語句錯誤。這種錯誤一般是編程時不小心或是對語句的錯誤理解造成的。在發(fā)生
3、語句錯誤時,程序一般不能正常編譯通過。這時會提示錯誤的類型和錯誤的位置,按照這些提示改正程序的語法錯誤即可完成錯誤的修改。3、C程序中的錯誤與異常C程序中的錯誤,根據(jù)嚴重程序的不同,可以分為異常與警誤兩類。在編譯程序時,這兩種情況對編譯的影響是不同的,對錯誤與異常的處理方式是不同的。1.什么是異常異常指的是代碼中輕微的錯誤,這些錯誤一般不會影響程序的正常運行,但是不完全符合編程的規(guī)范。在編譯程序時,會產(chǎn)生一個“警告”,但是程序會繼續(xù)編譯。下面的程序會使程序發(fā)生異常,在編譯時產(chǎn)生一個警告錯誤。?在除法中,0作除數(shù)。?在開方運算時,對負數(shù)開平方。?程序的主函數(shù)
4、沒有聲明類型。?程序的主函數(shù)沒有返回值。?程序中定義了一個變量,但是沒有使用這個變量。?變量的存儲發(fā)生了溢出。2.什么是錯誤錯誤指的是程序的語法出現(xiàn)問題,程序編譯不能正常完成,產(chǎn)生一個錯誤信息。這時會顯示錯誤的類型與位置。根據(jù)這些信息可以對程序進行修改。4、編譯中的警告提示在編譯程序時,如果發(fā)生了不嚴重的異常,會輸出一個錯告錯誤,然后完成程序的編譯。例如下面的內(nèi)容是一個程序在編譯時產(chǎn)生的警告。5.1.c:Infunction'main':5.1.c:16:警告:‘main’的返回類型不是‘int’5.1.c:18:警告:被零除這些的含義如下所示。(1)“I
5、nfunction'main':”表示發(fā)生的異常在main函數(shù)內(nèi)。(2)“5.1.c:16:”表示發(fā)生異常的文件是5.1.c,位置是第16行。(3)下面的信息是第16行的異常,表明程序的返回類型不正確?!甿ain’的返回類型不是‘int’(4)下面的警告信息表明程序的第18行有除數(shù)為0的錯誤。5.1.c:18:警告:被零除1.8.4找不到包含文件的錯誤程序中的包含文件在系統(tǒng)或工程中一定要存在,否則程序編譯時會發(fā)生致命錯誤。例如下面的語句包含了一個不正確的頭文件。#include編譯程序時,會發(fā)生錯誤,錯誤信息如下所示。5.1.c:2:2
6、0:錯誤:stdio2.h:沒有那個文件或目錄1.8.5錯誤地使用逗號程序中逗號的含義是并列幾個內(nèi)容,形成某種算法或結(jié)構。程序中如果錯誤地使用逗號,會使程序在編譯時發(fā)生致命錯誤。例如下面的代碼,是程序中的if語句后面有一個錯誤的逗號。intmax(inti,intj){if(i>j),{return(i);}else{return(j);}}程序編譯時輸出的錯誤信息如下所示。表明max函數(shù)中逗號前面的表達式有錯誤,實際上的錯誤是多一個逗號。5.1.c:Infunction‘max’:5.1.c:4:錯誤:expectedexpressionbefore‘,
7、’token5.1.c:Infunction‘max’:1.8.6括號不匹配錯誤程序中的引號、單引號、小括號、中括號、大括號等符號必須成對出現(xiàn)。這方面的錯誤會使程序發(fā)生符號不匹配的錯誤。發(fā)生這種錯誤后,編譯程序往往不能理解代碼的含義,也不能準確顯示錯誤的位置,而是顯示表達式錯誤。例如下面的代碼,在最后一行上了一個花括號。intmax(inti,intj){if(i>j){return(i);}else{return(j);}編譯程序時,會顯示下面的錯誤信息。5.1.c:22:錯誤:expecteddeclarationorstatementatendofi
8、nput1.8.7小括號不匹配錯誤程序中的小括號一般在一行內(nèi)成對出