C語言的基本編寫規范你瞭解嗎
基本編寫規范
規范是一種規定,它是一種人為的、約定成俗的,即使不按照那種規定也不會出錯,這種規定就叫作規范。雖然我們不按照規范也不會出錯,但是那樣代碼寫得就會很亂。如果你養成一種非常不好的寫代碼的習慣,代碼寫得亂七八糟,等到將來工作面試的時候,這樣的習慣可能會讓你失去機會。
一、代碼規范化的好處
看著整齊舒服,邏輯清楚,條理清晰。假如你現在用不規范的方式寫瞭一萬行代碼,現在能看得懂,但等過瞭三個月你再回頭看時就很吃力瞭,更不要說給別人看瞭。所以代碼要寫規范。規范的代碼不容易使程序出錯,即使出錯瞭查錯也會很方便。如果按照不規范的格式輸入代碼的話,很容易出錯。格式雖然不會影響程序的功能,但會影響可讀性。程序的格式追求清晰、美觀,是程序風格的重要構成元素。
規范的代碼
約瑟夫環
#include <stdio.h> #define N 100 int main() { int n,m=3,s=1; //n:總人數,m:報數值,s報數人的起始編號 scanf("%d",&n); int a[N] = {0}; //數組初始化 int i,j; for(i = 0; i < n; i++) //數組遍歷 { a[i] = i+1; //i是數組的位置量,a[i]是每個人的原始編號(從1開始) } i=s-1; //數組的起點(0) while (n > 1) { i = (i+m-1) % n; //出圈的人在數組中的位置 for(j = i+1; j < n; j++) { a[j-1] = a[j]; } n--; //出局1人後,總人數-1 if(i == n) //終點後,開始起點(圍成一個圈) { i = 0; } } printf("%d\n", a[i]); //輸出留下的人的原始編號 return 0; }
不規范的代碼
#include<stdio.h>int main(void){int n,u,d,s,t;s=0;t=0;scanf("%d%d%d",&n,&u,&d);if(u>=n) printf("1");else{do{s=s+u;t++;if(s>=n)break;else{s=s-d;t++;}}while(s<=n);printf("%d",t);}}#include<stdio.h> int main(void){int n,u,d,s,t;s=0; t=0; scanf("%d%d%d",&n,&u,&d); if(u>=n) printf("1"); else{ do{s=s+u;t++; if(s>=n)break; else { s=s-d; t++;} }while(s<=n); printf("%d",t);} }
二、規范目的與基本規則
1.目的
可移植性、連貫、整潔、易於維護、易於理解、簡潔
2.基本原則
1.空行
空行起著分隔程序段落的作用。空行得體將使程序的佈局更加清晰。空行不會浪費內存。
規則一:定義變量後要空行。盡可能在定義變量的同時初始化該變量。
規則二:每個函數定義結束之後都要加空行。
規則三:兩個相對獨立的程序塊、變量說明之後必須要加空行。比如上面幾行代碼完成的是 一個功能,下面幾行代碼完成的是另一個功能,那麼它們中間就要加空行。這樣看起來更清晰。
例
2.空格
規則一:關鍵字之後要留空格。像 const、case 等關鍵字之後至少要留一個空格,否則無法辨析關鍵字。像 if、for、while 等關鍵字之後應留一個空格再跟左括號(,以突出關鍵字。
規則二:函數名之後不要留空格,應緊跟左括號(,以與關鍵字區別。
規則三:(
後不打空格; )
、,
、;
這三個前不打空格。
規則四:,
之後要留空格。如果;
不是一行的結束符號,其後要留空格。
規則五:賦值運算符、關系運算符、算術運算符、邏輯運算符、位運算符,如 =、==、!=、+=、-=、*=、/=、%=、>>=、<<=、&=、=、|=、>、<=、>、>=、+、-、*、/、%、&、|、&&、||、<<、>>、 等雙目運算符的前後應當加空格。
註意,%d 中的“%”前後不用加空格。
規則六:單目運算符 !、~、++、--、-、*、& 等前後不加空格。
規則七:像數組符號[]、結構體成員運算符.、指向結構體成員運算符->,這類操作符前後不加空格。
規則八:對於表達式比較長的 for 語句和 if 語句,為瞭緊湊起見,可以適當地去掉一些空格。但 for 和 if 後面緊跟的空格不可以刪,其後面的語句可以根據語句的長度適當地去掉一些空格。例如:
for (i=0; i<10; i++); //for 和分號後面保留空格就可以瞭,=和<前後的空格可去掉。
3.成對書寫(有些編譯器會自動補括號)
成對的符號一定要成對書寫,如 ()、{}。不要寫完左括號然後寫內容最後再補右括號,這樣很容易漏掉右括號,尤其是寫嵌套程序的時候。
4.縮進(有些編譯器會自動縮進)
縮進是通過鍵盤上的 Tab 鍵實現的,縮進可以使程序更有層次感。原則是:如果地位相等,則不需要縮進;如果屬於某一個代碼的內部代碼就需要縮進。
5.對齊(有些編譯器會自動對齊)
規則一:{
和}
分別都要獨占一行。互為一對的{
和}
要位於同一列,並且與引用它們的語句左對齊。
規則二:{}
之內的代碼要向內縮進一個 Tab,且同一地位的要左對齊,地位不同的繼續縮進。
6.代碼行
規則一:一行代碼隻做一件事情,如隻定義一個變量,或隻寫一條語句。這樣的代碼容易閱讀,並且便於寫註釋。
規則二:if、else、for、while、do 等語句自占一行,執行語句不得緊跟其後。此外,非常重要的一點是,不論執行語句有多少行,就算隻有一行也要加{}
,並且遵循對齊的原則,這樣可以防止書寫失誤。
7.註釋
C語言中一行註釋一般采用//…
,多行註釋必須采用/*…*/
。註釋通常用於重要的代碼行或段落提示。在一般情況下,源程序有效註釋量必須在 20% 以上。
規則一:註釋是對代碼的“提示”,而不是文檔。註釋太多會讓人眼花繚亂。
規則二:如果代碼本來就是清楚的,則不必加註釋。
規則三:邊寫代碼邊註釋,修改代碼的同時要修改相應的註釋,以保證註釋與代碼的一致性,不再有用的註釋要刪除。
規則四:當代碼比較長,特別是有多重嵌套的時候,應當在段落的結束處加註釋,這樣便於閱讀。
規則五:每一條宏定義的右邊必須要有註釋,說明其作用。
例
#include <stdio.h> int main() { int i = 0; int x,y,z; int n; scanf("%d",&n); for(x = 0 ; x <= 100 ; x++) // 5分 { for(y = 0 ; y <= 100 ; y++) //2分 { for(z = 0 ; z <= 100 ; z++) //1分 { //判斷硬幣面值相加等於150分時,還要三種硬幣相加等於100枚 if((x*1 + y*2 + z*5 == 150) && x+y+z == 100) { i++; if(z > 0 && z <= n) {//判斷前N種方案 printf("%d %d %d",z,y,x); if(z < n) {//換行輸出,同時最後一行輸出完,不再換行 printf("\n"); } } } } } } return 0; }
三、其他細節
1.頭文件放在代碼最前面,頭文件include從抽象到具體,次序:C標準庫→C++標準庫→OS相關→第三方庫→工程頭文件
2.標識符的命名要清晰、明瞭,有明確含義,同時使用完整的單詞或大傢基本可以理解的縮寫,避免使人產生誤解
常見縮寫
總結
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!