位置:首頁 > 軟件操作教程 > 編程開發(fā) > C語言 > 問題詳情

C語言 函數(shù)的設(shè)計(jì)原則

提問人:劉團(tuán)圓發(fā)布時(shí)間:2020-11-30

因?yàn)镃語言的函數(shù)實(shí)現(xiàn)的是模塊的功能,所以模塊設(shè)計(jì)原則也適用于函數(shù)的設(shè)計(jì)。設(shè)計(jì)函數(shù)時(shí),最主要注意以下幾點(diǎn):

(1)函數(shù)功能獨(dú)立

    每一個(gè)函數(shù)應(yīng)該只實(shí)現(xiàn)一個(gè)特定的獨(dú)立功能,例如求階乘函數(shù)只實(shí)現(xiàn)階乘功能,不能在此函數(shù)中實(shí)現(xiàn)其他功能。每一個(gè)函數(shù)與其他函數(shù)的關(guān)系除了調(diào)用關(guān)系外,不能再有其他關(guān)系,這樣才能夠在修改 函數(shù)時(shí),不對(duì)其他函數(shù)造成影響。除了形參提供給外部的調(diào)用接口外,盡量不要使用全局變量等,以免受到外部的數(shù)據(jù)約束。

(2)函數(shù)的規(guī)模應(yīng)大小適中

    函數(shù)不能太大也不能太小。規(guī)模太大的函數(shù),可以考慮分解成若干個(gè)小函數(shù)實(shí)現(xiàn)。而規(guī)模太小的函數(shù),如只有一條語句,可以考慮將該函數(shù)撤銷,直接用語句實(shí)現(xiàn)。一個(gè)函數(shù)中也不要實(shí)現(xiàn)太多功能,因?yàn)椴焕诖a重用。如上例求組合數(shù)中,如果在fac()函數(shù)中加入數(shù)據(jù)輸入或輸出的功能,那么在調(diào)用fac()時(shí)必然要求輸入并且將結(jié)果輸出。可是有些結(jié)果不需要輸出,只在計(jì)算中出現(xiàn),所以這樣的fac()函數(shù)反而不利于實(shí)現(xiàn)代碼重用性。因此要求設(shè)計(jì)函數(shù)時(shí),功能盡量簡(jiǎn)潔,也就是說只實(shí)現(xiàn)最基本的功能即可。

    函數(shù)的規(guī)模也不可過小,過小沒有意義,如上例中將變量值輸入也定義為一個(gè)函數(shù):

int read(int x)

{

    scanf("%d",&x);

    return x;

}

需要對(duì)變量輸入數(shù)據(jù)時(shí),調(diào)用該函數(shù):

m=read(m); 

n=readtn);

這樣其實(shí)沒有太大的實(shí)際意義,不但沒有簡(jiǎn)化程序,反而增加了函數(shù)調(diào)用語句,增加代碼量。

(3)注意函數(shù)的層次不能過多

    在函數(shù)設(shè)計(jì)中,常常為了實(shí)現(xiàn)一個(gè)函數(shù),必須在該函數(shù)內(nèi)再調(diào)用另一個(gè)函數(shù),稱為函數(shù)的嵌套,這樣就出現(xiàn)了如圖所示的層次關(guān)系。

    從圖中可看到,從main()函數(shù)開始,整個(gè)程序分為4層,C語言中對(duì)于函數(shù)的嵌套層次并沒有限制,但一般實(shí)際設(shè)計(jì)程序中,考慮到結(jié)構(gòu)清晰性及內(nèi)存的限制,一個(gè)程序中的函數(shù)層次不可過多。

繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部