4.5 實現問題
在編寫C語言的函數時,有幾個要點需要我們牢記,因為它們影響到函數的效率和可用性。
4.5.1 參數和通用函數
通用函數是指能夠被用在各種情況下,或者是可被許多不同程序員使用的函數。我們不應該把通用函數建立在全局變量上(不應該在通用函數中使用全局變量)。函數所需要的所有數據都應該用參數傳遞(在個別難以這樣做的情況下,可以使用靜態(tài)變量)。使用參數傳遞,除了有助于函數能用在多種情況下之外,還能提高函數代碼的可讀性。不用全局變量,可以使得函數減少因副作用而導致錯誤的可能性。
4.5.2 效率
函數是C語言的基本構件。對于編寫簡單程序之外的所有程序來說,函數是必不可少的。但在一些特定的應用中,應當消除函數,而采用內嵌代碼。內嵌代碼是指一個函數的語句中不含函數調用語句。僅當執(zhí)行速度是很關鍵的場合下,才用內嵌代碼而不用函數。
有兩個原因使得內嵌代碼的執(zhí)行速度比函數快。首先,調用需要花費時間;其次,如果有參數需要傳遞,就要把它們放在堆棧中,這也要用時間。在幾乎所有的應用中,執(zhí)行時間上的這些微小開銷是微不足道的。不過當時間開銷至關重要時,使用內嵌代碼消除函數調用,可以把每次函數調用的開銷節(jié)省下來。下面的兩個程序都是打印從1到1 0的數的平方。由于函數調用需要花費時間,所以內嵌代碼版本運行的比另一個要快。
內嵌函數調用
main( ) main( )
{ {
int x; int x;
for(x=1,x < 11;++x) for(xx=1;x < 11;++x)
printf ("%d",x * x ); printf ("%d",sqr( x ) );
} }
s q r ( a ) ;
int a;
{
return a*a;
}
在編寫C語言的函數時,有幾個要點需要我們牢記,因為它們影響到函數的效率和可用性。
4.5.1 參數和通用函數
通用函數是指能夠被用在各種情況下,或者是可被許多不同程序員使用的函數。我們不應該把通用函數建立在全局變量上(不應該在通用函數中使用全局變量)。函數所需要的所有數據都應該用參數傳遞(在個別難以這樣做的情況下,可以使用靜態(tài)變量)。使用參數傳遞,除了有助于函數能用在多種情況下之外,還能提高函數代碼的可讀性。不用全局變量,可以使得函數減少因副作用而導致錯誤的可能性。
4.5.2 效率
函數是C語言的基本構件。對于編寫簡單程序之外的所有程序來說,函數是必不可少的。但在一些特定的應用中,應當消除函數,而采用內嵌代碼。內嵌代碼是指一個函數的語句中不含函數調用語句。僅當執(zhí)行速度是很關鍵的場合下,才用內嵌代碼而不用函數。
有兩個原因使得內嵌代碼的執(zhí)行速度比函數快。首先,調用需要花費時間;其次,如果有參數需要傳遞,就要把它們放在堆棧中,這也要用時間。在幾乎所有的應用中,執(zhí)行時間上的這些微小開銷是微不足道的。不過當時間開銷至關重要時,使用內嵌代碼消除函數調用,可以把每次函數調用的開銷節(jié)省下來。下面的兩個程序都是打印從1到1 0的數的平方。由于函數調用需要花費時間,所以內嵌代碼版本運行的比另一個要快。
內嵌函數調用
main( ) main( )
{ {
int x; int x;
for(x=1,x < 11;++x) for(xx=1;x < 11;++x)
printf ("%d",x * x ); printf ("%d",sqr( x ) );
} }
s q r ( a ) ;
int a;
{
return a*a;
}