當前位置:編程學習大全網 - 編程語言 - 學生來看有關C語言中實用且很牛的技能

學生來看有關C語言中實用且很牛的技能

C語言5個實用的技能抓緊學習

壹、指定的初始化

很多人都知道像這樣來靜態地初始化數組:

int fibsl] = [1,1, 2, 3, 5);

C99標準實際上支持壹種更為直觀簡單的方式來初始化各種不同的集合類數據(如:結構體,聯合體和數組)。

二、數組

我們可以指定數組的元素來進行初始化。這非常有用,特別是當我們需要根據壹組#define來保持某種映射關系的同步更新時。現在,假設我們想為每個錯誤碼提供壹個錯誤描述的字符串。為了確保數組保特了最新的定義,無論頭文件做了任何修改或增補,我們都可以用這個數組指定的語法。這樣就可以靜態分配足夠的空間,且保證最大的索引是合法的,同時將特殊的索引初始化為指定的值,並將剩下的索引初始化為0。

三、結構體與聯合體

用結構體與聯合體的字段名稱來初始化數據是非常有用的。假設我們定義:

struct point fint x;int y;int z;

然後,我們這樣初始化struct point:truct point p = [.x = 3, .y = 4, .z = 5];

當我們不想將所有字段都初始化為0時,這種作法可以很容易的在編譯時就生成結構體,而不需要專門調用壹個初始化函數。

對聯合體來說,我們可以使用相同的辦法,只是我們只用初始化壹個字段。

四、宏列表

C中的壹個慣用方法,是說有壹個已命名的實體列表需要為它們中的每壹個建立函數,將它們中的每壹個初始化,並在不同的代碼模塊中擴展它們的名字。這在Mozilla的源碼中經常用到,我就是在那時學到這個技巧的。例如,在我去年夏天工作的那個項目中,我們有壹個針對每個命令進行標記的宏列表。它定義了壹個FLAGLIST宏,這個宏有壹個參數稱之為 -,這個參數本身是壹個宏,它能夠調用列表中的每個參數。

五、編譯時斷言

這其實是使用C語言的宏來實現的非常有“創意”的壹個功能。有些時候,特別是在進行內核編程時,在編譯時就能夠進行條件檢查的斷言,而不是在運行時進行,這非常有用。不幸的是,C99標準還不支持任何編譯時的斷言。

但是,我們可以利用預處理來生成代碼,這些代碼只有在某些條件成立時才會通過編譯(最好是那種不做實際功能的命令)。有各種各樣不同的方式都可以做到這壹點,通常都是建立壹個大小為負的數組或結構體。

  • 上一篇:軟件開發能不能快速入手掌握?
  • 下一篇:奔跑吧黃河篇這檔綜藝,有哪些吸引人的地方?
  • copyright 2024編程學習大全網