educn68的個(gè)人空間 http://selenalain.com/space-uid-108783.html [收藏] [復制] [RSS]

博客

【分享-信盈達】Linux內核編碼風(fēng)格4!

已有 1936 次閱讀2014-7-4 14:35

   第六章:函數

 

函數應該簡(jiǎn)短而漂亮,并且只完成一件事情。函數應該可以一屏或者兩屏顯示完(我們都知道ISO/ANSI屏幕大小是80x24),只做一件事情,而且把它做好。

 

一個(gè)函數的最大長(cháng)度是和該函數的復雜度和縮進(jìn)級數成反比的。所以,如果你有一個(gè)理論上很簡(jiǎn)單的只有一個(gè)很長(cháng)(但是簡(jiǎn)單)的case語(yǔ)句的函數,而且你需要在每個(gè)case里做很多很小的事情,這樣的函數盡管很長(cháng),但也是可以的。

 

不過(guò),如果你有一個(gè)復雜的函數,而且你懷疑一個(gè)天分不是很高的高中一年級學(xué)生可能甚至搞不清楚這個(gè)函數的目的,你應該更嚴格的遵守最大限制。使用輔助函數,并為之取個(gè)具描述性的名字(如果你覺(jué)得其對性能要求嚴格的話(huà),你可以要求編譯器將它們內聯(lián)展開(kāi),它往往會(huì )比你更好的完成任務(wù)。)

 

函數的另外一個(gè)衡量標準是本地變量的數量。此數量不應超過(guò)510個(gè),否則你的函數就有問(wèn)題了。重新考慮一下你的函數,把它分拆成更小的函數。人的大腦一般可以輕松的同時(shí)跟蹤7個(gè)不同的事物,如果再增多的話(huà),就會(huì )糊涂了。即便你聰穎過(guò)人,你也可能會(huì )記不清你2個(gè)星期前做過(guò)的事情。

 

在源文件里,使用空行隔開(kāi)不同的函數。如果該函數需要被導出,它的EXPORT*宏應該緊貼在它的結束大括號之下。比如:

 

int system_is_up(void)

{

        return system_state == SYSTEM_RUNNING;

}

EXPORT_SYMBOL(system_is_up);

 

在函數原型中,包含函數名和它們的數據類(lèi)型。雖然C語(yǔ)言里沒(méi)有這樣的要求,在Linux里這是提倡的做法,因為這樣可以很簡(jiǎn)單的給讀者提供更多的有價(jià)值的信息。

 

 

                第七章:集中的函數退出途徑

 

雖然被某些人聲稱(chēng)已經(jīng)過(guò)時(shí),但是goto語(yǔ)句的等價(jià)物還是經(jīng)常被編譯器所使用,具體形式是無(wú)條件跳轉指令。當一個(gè)函數從多個(gè)位置退出并且需要做一些通用的清潔工作的時(shí)候,goto的好處就顯現出來(lái)了。

理由是:

- 無(wú)條件語(yǔ)句容易理解和跟蹤

- 嵌套程度減小

- 可以避免由于修改時(shí)忘記更新某個(gè)單獨的退出點(diǎn)而導致的錯誤

- 減輕了編譯器的工作,無(wú)需刪除冗余代碼;)

 

int fun(int a)

{

        int result = 0;

        char *buffer = kmalloc(SIZE);

 

        if (buffer == NULL)

                return -ENOMEM;

 

        if (condition1) {

                while (loop1) {

                        ...

                }

                result = 1;

                goto out;

        }

        ...

out:

        kfree(buffer);

        return result;

}

 

 

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
返回頂部
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页