在編寫C語言的函數(shù)時(shí),有幾個(gè)要點(diǎn)需要我們牢記,因?yàn)樗鼈冇绊懙胶瘮?shù)的效率和可用性。
4.5.1 參數(shù)和通用函數(shù)
通用函數(shù)是指能夠被用在各種情況下,或者是可被許多不同程序員使用的函數(shù)。我們不應(yīng)該把通用函數(shù)建立在全局變量上(不應(yīng)該在通用函數(shù)中使用全局變量)。函數(shù)所需要的所有數(shù)據(jù)都應(yīng)該用參數(shù)傳遞(在個(gè)別難以這樣做的情況下,可以使用靜態(tài)變量)。使用參數(shù)傳遞,
除了有助于函數(shù)能用在多種情況下之外,還能提高函數(shù)代碼的可讀性。不用全局變量,可以使得函數(shù)減少因副作用而導(dǎo)致錯(cuò)誤的可能性。
4.5.2 效率
函數(shù)是C語言的基本構(gòu)件。對(duì)于編寫簡單程序之外的所有程序來說,函數(shù)是必不可少的。
但在一些特定的應(yīng)用中,應(yīng)當(dāng)消除函數(shù),而采用內(nèi)嵌代碼。內(nèi)嵌代碼是指一個(gè)函數(shù)的語句中不含函數(shù)調(diào)用語句。僅當(dāng)執(zhí)行速度是很關(guān)鍵的場(chǎng)合下,才用內(nèi)嵌代碼而不用函數(shù)。
有兩個(gè)原因使得內(nèi)嵌代碼的執(zhí)行速度比函數(shù)快。首先,調(diào)用需要花費(fèi)時(shí)間;其次,如果有參數(shù)需要傳遞,就要把它們放在堆棧中,這也要用時(shí)間。在幾乎所有的應(yīng)用中,執(zhí)行時(shí)間上的這些微小開銷是微不足道的。不過當(dāng)時(shí)間開銷至關(guān)重要時(shí),使用內(nèi)嵌代碼消除函數(shù)調(diào)用,
可以把每次函數(shù)調(diào)用的開銷節(jié)省下來。下面的兩個(gè)程序都是打印從1到1 0的數(shù)的平方。由于函數(shù)調(diào)用需要花費(fèi)時(shí)間,所以內(nèi)嵌代碼版本運(yùn)行的比另一個(gè)要快。