Linux下的C編程特點

來源:互聯網
上載者:User

標籤:c   linux   gnu   

Linux下代碼括弧“{”和“}”的使用原則如下

(1)對於結構體、if/for/while/switch語句,“{”不另起一行,例如:

struct var_data{int len;char data[0];};if (a == b){a = c;d = a;}for (i = 0; i < 10; i++){a = c;d = a;}

(2)如果if、for迴圈只有1行,不要加“{”和“}”。

(3)if和else混用的情況下,else語句不另起一行,例如:

if (a == y){...}else{...}

(4)對於函數,”{“另起一行,在switch和case語句方面,Linux建議switch和case對齊,例如:

switch{case 'G':case 'g':mem <<= 30;break;case 'M':case 'm':mem <<= 20;break;case 'K':case 'k':mem <<= 10;break;default:break;}
GNU C的擴充

1 零長度和變數長度數組

truct var_data {int len;char data[0];}

也可以用一個變數定義數組,例如:

int main (int argc, char *argv[]){int i, n = argc;double x[n];for (i = 0; i < n; i++)x[i] = i;return 0;}

2 case 範圍支援,例如:

switch (ch) {case '0'... '9': c -= '0';break;case 'a'... 'f': c -= 'a' - 10;break;case 'A'... 'F': c -= 'A' - 10;break;}

3 語句運算式

GNU C把括弧中的複合陳述式看做是一個運算式,稱為語句運算式。

#define min_t(type, x, y) ({type __x = (x); type __y = (y); __x < __y ? __x: __y})

4 typeof 關鍵字

typeof(x)可以獲得x的類型,因此上面的定義可以變成:

#define min(x, y) ({ const typeof(x) _x = (x);const typeof(y) _y = (y);_x < _y ? x: y;})

5 可變參數宏

#define pr_debug(fmt, arg...) printf(fmt, ##arg)

6 在宏定義中使用do{}while(0)

#define SAFE_FREE(p) do{free(p); p = NULL;}while(0)if (NULL != p)SAFE_FREE(p);else...

1)上面的代碼如果不用do{}while(0)包含起來,展開過後if後面就會出現兩天語句,導致else分支沒有對應的if,編譯失敗。

2)假設沒有後面的else分支,則不論if的條件是否成立,p = NULL;都會執行。


Linux下的C編程特點

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.