C语言:代码风格
[聲明]:本文章為博主自學C語言時遇到的困惑,如有不正,歡迎指出
目錄
一、優秀的代碼可讀性強
二、不好的代碼風格可能產生的影響
1.人為誤會
2.邏輯理解
3.健壯性
三、C語言混亂代碼大賽(IOCCC)
一、優秀的代碼可讀性強
養成良好的代碼風格是成為優秀程序員的基本,優秀的代碼應該具有良好的可讀性
我們先來看一段代碼
int main(void) {int i=0;for(i=1;i<=100;i++)if(i%2==1)printf("%d ",i);return 0; }我們可以只用一行代碼實現判斷1~100內的所有奇數,外行人看了直呼大神,內行人老人地鐵手機這段代碼雖然可以成功運行,但可讀性一言難盡
當你寫完一大長篇代碼時成就滿滿,認為只有你和上帝可以看懂你的代碼,等到第二天醒來,現在只有上帝看得懂了()
所以良好的代碼風格不僅可以讓學習更高效,還可以統合你的團隊
我們更改上段代碼的風格,按語句分成不同行
int main(void) {int i = 0;for (i = 1; i <= 100; i++) if (i % 2 == 1) printf("%d ", i);return 0; }現在看來代碼就清晰了很多,但這種寫法在某些情況下會讓人產生誤會,如下
二、不好的代碼風格可能產生的影響
1.人為誤會
int a = 5; int b = 20; if (1 == a)if (b == 20)printf("Never Gonna Give You Up\n"); elseprintf("Never Gonna Let You Down\n");此處代碼執行不會打印任何值,else 應該與距離其最近的 if(b == 20) 匹配,兩者包含于 if(1 == a)之中,所以判斷 1 != a 時,便會直接跳出此 if 語句,不會執行打印
但我們不能每次都去找距離 else 最近的 if 吧,?所以我們給這段代碼加上大括號
if (1 == a) {if (20 == b)printf("Never Gonna Give You Up\n");elseprintf("Never Gonna Let You Down\n"); }這樣就避免了誤會,當然里側我們也可以加上大括號
if (1 == a) {if (20 == b){printf("Never Gonna Give You Up\n");}else{printf("Never Gonna Let You Down\n");} }?這里對于大括號的使用風格會有差異,比如很多輔導書為了節約空間,會寫成這樣
if (1 == a){if (20 == b){printf("Never Gonna Give You Up\n");}else{printf("Never Gonna Let You Down\n");} }2.邏輯理解
這里還有另外一個大同小異的例子,這兩段代碼是否相同?
//CODE 1 if (a > 0) {return 0; } return 1;//CODE 2 if (a > 0) {return 0; } else {return 1; }輸出結果是相同的,不過要注意,這兩段代碼在邏輯上是不同的
CODE 1 中 if(a > 0) 若判定為假,則會跳出 if 繼續向下執行,結果為返回 1
CODE 2 中?if(a > 0) 若判定為假,則會執行 else ,結果為返回 1
雖然結果相同,但這里建議使用 CODE 2 的代碼風格
3.健壯性
初學者在初學C語言時時常會把 '=' 和 '==' 的意義搞混,當然即便是大佬也可能會在高強度工作時不小心打錯代碼,這里我們想判斷 a 是否 等于 5
int a = 3; if (a == 5) {printf("a = %d\n", a);//5 } if (a = 5) {printf("a = %d\n", a);//5 }賦 a 初值為 3 ,本不應該執行打印,但由于打錯代碼,將判斷 a 是否等于 5 寫成了將 5 賦值給 a ,這樣結果當然是 a == 5,執行打印
這個問題的嚴重性在于它屬于邏輯錯誤,也就是語法上并沒有錯誤,程序可以正常運行,編譯器不會檢測出錯,所以一旦發生這個錯誤,我們是很難發現的
?雖然編譯器不夠聰明,但我們人類很聰明,這里推薦下面這種寫法
if (5 == a) {printf("a = %d\n", a);//5 } if (5 = a) {printf("a = %d\n", a);//5 }我們僅交換了 a 與 5 的位置,倘若發生上面那種錯誤,這時編譯器就會報錯,這是為什么呢?
因為 5 它不是一個 左值,不能給它賦值,產生了語法錯誤,這是編譯器可以檢測出來的,通過這種寫法,我們就可以及時得知自己的錯誤,提高了代碼的健壯性
三、C語言混亂代碼大賽(IOCCC)
當然,并不是說不規規矩矩的代碼就完全沒用,國際C語言混亂代碼大賽(IOCCC),都是世界頂級C語言開發者的娛樂作品,除去乏味的工作,你還可以讓代碼寫出宅男藝術感
總結
- 上一篇: 基于Android的移动学习软件的设计与
- 下一篇: Firefly笔记一之http模块