如何快速查找c語言編譯時的錯
代碼是否存在邏輯錯誤:
1、變數使用前未被數值
實例:
int main()
{
int x=5,y,z;
z=x*y;
printf("%d",z);
return 0;
}
在此程序中變數y在使用之前未被賦值,所以結果輸出z的值就會是系統隨機分配一個值給y再加乘以x的值。
2、把賦值賦值符號「=」與等於符號「==」相混淆
實例:
有一下語句:
if(a=5)
{
printf("a等於5");
}
輸出的結果永遠都是「a等於5」,原因是在執行if(a=5)之時,無論a之前是什麼值,此時都會被重新賦值為5,而不是把a的值與5相比較,而正確的表示比較的表示為:
if(a==5)
{
printf("a等於5");
}
(1)如何快速查找c語言編譯時的錯擴展閱讀
C語言編程注意事項:
1、書寫標識符時,忽略了大小寫字母的區別。
2、將字元常量與字元串常量混淆。
3、忽略了變數的類型,進行了不合法的運算。
4、忽略了「=」與「==」的區別。
5、忘記加分號。
6、多加分號。
7、輸入變數時忘記加地址運算符「&」。
B. gcc編譯器幾乎很難發現c語言中的語法錯誤嗎
1、使用gcc命令編譯c++程序遇到錯誤。
需要明確的是,gcc是可以編譯c++程序的。gcc,原名GNU C Compiler,最初是C語言的編譯器,但經過發展之後,它變成了一個可以支持C++、Fortran、Pascal、Objective-C、Java、Ada,以及Go與其他語言編譯的編譯器套件,其名稱也因此改為了GNU Compiler Collection。g++便是其中的一部分,用於處理c++語言。雖然大多數情況下,我們直接使用g++命令來編譯c++程序,但直接使用gcc命令也可以編譯c++程序的,當然前提是安裝了g++(gcc-c++)模塊。gcc命令會根據源程序的後綴名來決定實際使用的編譯器,編譯過程與直接使用g++完全一樣,但是,鏈接過程有點不同。g++命令會自動給你加上c++標准庫的鏈接,但gcc命令卻不會給你自動加上,因些需要手動加上。例如如下的程序:
#include <iostream>
int main()
{
std::cout << "Hello World!" << std::endl;
return 0;
}
使用gcc命令編譯會報undefined reference的錯誤,使用g++命令就不會,但是使用gcc命令加上stdc++的鏈接庫就可以成功編譯。所以,如果是編譯c++程序,最好還是使用g++命令編譯吧。
2、undefined reference to XXX的問題
這個問題應該說是非常常見的一個問題了,通常情況下,這個問題是由於你使用了第三方的庫文件,卻沒有加上相應的庫的鏈接,導致編譯器找不到符號。這種情況也比較好解決,只要加上鏈接庫就可以了,具體命令有兩種寫法,一是使用-L和-l參數指定庫的路徑和庫名,其中,庫的文件名必須為libxxx.so或者libxxx.a的形式,其中的xxx就是庫名,跟在-l參數後面;第二種是直接寫上庫的文件名(相對路徑、絕對路徑都可以),這種寫些就是直接當這個庫文件是一個.o文件(目標文件)進行鏈接。
不過有時候,明明已經寫上了鏈接庫,可還是會有undefined reference的錯誤,這個候,可能就是鏈接順序的問題了。同樣是上述簡單的hello.cpp,我們使用gcc命令編譯(不用g++命令是因為它自動加了stdc++的鏈接庫,我們不好改順序)
可以看到,雖然加上了-lstdc++,但還是有undefined reference的錯誤。這是因為鏈接器在進行鏈接的時候,是從前往後找符號的。由於libstdc++.so庫中的的符號(std::cout,std::endl)是在hello.o(由hello.cpp編譯而來)中使用的,因此,當鏈接器從左至右拋描庫文件時,第一個碰到了stdc++庫,發現並沒有使用這個庫中的符號,於是就將這個庫給丟棄不用了,繼續往後鏈接hello.o的時候,發現了其中要使用一些符號,而這些符號是stdc++中的,而stdc++庫已經被鏈接器給扔了,所以就找不著了,就有了undefined reference。解決的方案也是兩個:一是按引用順序寫鏈接的目標文件的順序,如果是編譯可執行程序,就從包含main函數的.o文件開始寫,最基礎的庫寫在最右邊;二是加上-Wl,--as-needed參數,這個參數會將庫文件中加入NEED標識,而不管這個庫文件有沒有用到(也就是告訴鏈接器,那個暫時沒用到的庫先別扔了)。但是第二種方法好像對stdc++這個庫沒什麼作用,其他的第三方庫可以,具體原因是什麼還不太清楚,所以,最好寫編譯選項的時候,庫文件還是按引用順序寫吧。
C. c語言編譯出錯,怎麼查找錯誤出在哪行
步驟:
1.打開源代碼文件,在控制台里查看錯誤類型。
D. c璇璦緙栫▼杞浠跺嚭鐜癳rror 鎬庝箞鐢ㄥ揩鎹烽敭鏌ユ壘鍒伴敊璇鍦ㄥ摢涓琛 鎴戣板緱鏄疐鍑犳潵鐫
F4閿欒鏌ユ壘
F7緙栬瘧鏁翠釜欏圭洰
ctrl+F7緙栬瘧褰撳墠婧愭枃浠
Ctrl+F5闈炶皟璇曡繍琛岀洿鎺ョ敓鎴恊xe鏂囦歡
shift+F5緇撴潫榪愯
F9璁炬柇鐐
F10鍗曟ヨ皟璇曪紝鍙鍦╩ain鍑芥暟涓榪涜
F11榪涘叆鍑芥暟浣撳唴閮
shift+F11榪愯岃嚦褰撳墠鍑芥暟浣撳
shift+綆澶撮変腑鏂囨湰
Alt+F8鏁寸悊閫変腑浠g爜
Alt+0 鏄劇ずWorkspace宸ヤ綔鍖虹獥鍙
Alt+2鏄劇ず杈撳嚭紿楀彛
Alt+3鏄劇ず鍙橀噺瑙傚療紿楀彛
Alt+4鏄劇ず鍙橀噺鑷鍔ㄦ煡鐪嬬獥鍙
Alt+5鏄劇ず瀵勫瓨鍣ㄦ煡鐪嬬獥鍙
Alt+6鏄劇ず鍐呭瓨鏌ョ湅紿楀彛
Alt+7鏄劇ず鍫嗘爤紿楀彛
Alt+8鏄劇ず奼囩紪紿楀彛
E. c語言編程怎麼測試程序的對錯
自己好好看看程序吧,別依靠編譯器,編譯器不是萬能的!
1.語法錯誤
在編譯前瀏覽程序的源代碼看看是否有明顯的錯誤。
可以查看由編譯器發現的錯誤。
發現錯誤——從第一個開始修改,每次修改1~2個,然後重現編譯。
發現的錯誤位置可能比真正的錯誤要滯後一行。
2.語義錯誤
比較程序實際得到的結果和預期結果。
跟蹤程序,執行步驟——可用EXCEL(語句行×變數值)
在程序的幾個關鍵點處加入額外的printf()語句以監視所選變數的值。
或用調試器。
F. 用什麼軟體進行C語言編程可以檢測錯誤的內容
不建議依賴工具
出現編寫錯誤往往是由於粗心或者是沒有養成良好的編程習慣造成的
對於初學來說 正是養成習慣的關鍵時期 這段時間內不建議使用任何的輔助軟體 比如補齊或者提示功能
同時 通過編譯出錯來定位解決編譯錯誤也是一個很好的鍛煉基本技能的機會
等到你因為拼寫導致的編譯錯誤很少見時 再考慮使用這類軟體 來提供你編程的效率