如何寫出好(易於除錯)的**
程式設計常見的錯誤
debug 通常稱為除錯版本,它包含除錯資訊,並且不作任何優化,便於程式設計師除錯程式。
release 稱為發布版本,它往往是進行了各種優化,使得程式在**大小和執行速度上都是最優的,以便使用者很好地使用。
int main()
; printf("%p\n", arr);
printf("%p\n", &i);
環境下 <=10 就死迴圈了
//gcc 編譯器 <=11 就死迴圈了
//vs2013 <=12 死迴圈
for (i = 0; i <= 12; i++)
system("pause");
return 0;
}
死迴圈的原因:
main函式建立了i和arr是區域性變數,儲存在棧區,i在高位址建立,arr在i的低位址建立,所以在使用的過程中產生越界,可能arr會遇到i
棧區的預設使用
先使用高位址處的空間,在使用低位址處的空間
陣列隨著下標的增長,位址是由低到高的變化
啟動除錯,經常用來直接調到下乙個斷點處。
建立斷點和取消斷點 斷點的重要作用,可以在程式的任意位置設定斷點。這樣就可以使得程式在想要的位置隨意停止執行,繼而一步步執行下去。
逐過程,通常用來處理乙個過程,乙個過程可以是一次函式呼叫,或者是一條語句。
逐語句,就是每次都執行一條語句,但是這個快捷鍵可以使我們的執行邏輯進入函式內部(這是最常用的)。
開始執行不除錯,如果你想讓程式直接執行起來而不除錯就可以直接使用。
**執行正常
bug很少
效率高可讀性高
可維護性高
注釋清晰
文件齊全
使用assert
盡量使用const
養成良好的編碼風格
新增必要的注釋
避免編碼的陷阱
//void my_strcpy(char* dest, char* src)
//// *dest = *src;//'\0'
//}//void my_strcpy(char* dest, char* src)
//// }
//}#include char* my_strcpy(char* dest, const char* src)
return ret;
}int main()
注意:
分析引數的設計(命名,型別),返回值型別的設計
這裡講解野指標,空指標的危害。
assert的使用,這裡介紹assert的作用
引數部分 const 的使用,這裡講解const修飾指標的作用
注釋的新增
const int num = 10;
int n = 100;
int * p = #
// const int * p = #
// int * const p = #
// const 放在指標變數的*左邊時,修飾的是*p,也就是說:不能通過p來改變*p(num)的值
// const 放在指標變數的*右邊是,修飾的是指標變數p本身,p不能被改變了
*p = 20;
p = &n;
printf("%d\n", num);
結論:const修飾指標變數的時候:
const如果放在*的左邊,修飾的是指標指向的內容,保證指標指向的內容不能通過指標來改變。但是指標變數本身的內容可變。
const如果放在*的右邊,修飾的是指標變數本身,保證了指標變數的內容不能修改,但是指標指向的內容,可以通過指標改變.
int my_strlen(const char *str)
return count;
}int main()
編譯型錯誤
直接看錯誤提示資訊(雙擊),解決問題。或者憑藉經驗就可以搞定。相對來說簡單。
鏈結型錯誤
看錯誤提示資訊,主要在**中找到錯誤資訊中的識別符號,然後定位問題所在。一般是識別符號名不存在或者拼寫錯誤。
執行時錯誤
借助除錯,逐步定位問題。最難搞。
實用C語言技巧
c語言常常讓人覺得它所能表達的東西非常有限。它不具有類似第一級函式和模式匹配這樣的高階功能。但是c非常簡單,並且仍然有一些非常有用的語法技巧和功能,只是沒有多少人知道罷了。指定的初始化 很多人都知道像這樣來靜態地初始化陣列 int fibs c99標準實際上支援一種更為直觀簡單的方式來初始化各種不同...
C語言實用知識 字元
int isalpha int ch 若ch是字母 a z a z 返回非0值,否則返回0。int isalnum int ch 若ch是字母 a z a z 或數字 0 9 返回非0值,否則返回0。int isdigit int ch 若ch是數字 0 9 返回非0值,否則返回0。int islo...
python實用教程 Python語言實用教程
出版說明 前言第1章 python概述 1.1 程式語言簡介 1.2 python語言簡介 1.2.1 python發展歷史 1.2.2 python特點 1.2.3 python應用場合 1.3 安裝python 1.3.2 unix和linux平台安裝python 1.3.3 在windows平...