用函式實現模組化程式設計一

EricsT發表於2024-11-10

為什麼要用函式

函式就是功能,每一個函式用來實現一個特定的功能。函式的名字反映其代表的功能

在設計一個較大的程式時,往往把它分為若干個程式模組,每一個模組包括一個或多個函式,每個函式實現一個特定的功能。一個C程式可由一個主函式和若干個其他函式構成。由主函式呼叫其他函式,其他函式也可以互相呼叫。同一個函式可以被一個或多個函式呼叫任意多次

在程式設計中善於利用函式,以減少重複編寫程式段的工作量,也是更便於實現模組化程式設計

一個C程式由一個或多個程式模組組成,每一個程式模組作為一個源程式檔案。對較大的程式,一般不希望把所有的內容全放在一個檔案中,而是將它們分別放在若干個原始檔中由若干個源程式檔案組成一個C程式。這樣便於分別編寫和編譯,提高除錯效率。一個源程式檔案可以為多個C程式共用

一個源程式檔案由一個或多個函式以及其他相關內容(如指令、資料宣告與定義等)組成。一個源程式檔案是一個編譯單位,在程式編譯時是以源程式檔案為單位進行分編譯的,而不是以函式為單位進行編譯的

C程式的執行是從main函式開始的,如果在main函式中呼叫其他函式,在呼叫後流程返回到main函式,在main函式中結束整個程式的執行

所有函式都是平行的,即定義函式時是分別進行的,是互相獨立的,一個函式並不從屬於另一個函式,即函式不能被巢狀定義。函式之間可以相互呼叫,但是不能呼叫main函式。main函式是被作業系統呼叫的

從使用者角度看,函式有兩種:

  • 庫函式,它是由系統提供的,使用者不必自己定義,可以直接使用它們。應該說明,不同的C語言編譯系統提供的庫函式的數量和功能會有一些不同,當然許多基本的函式是共同的
  • 使用者自己定義的函式,它是用以解決使用者專門需要的函式

從函式的形式看,函式分兩類:

  • 無參函式,在呼叫無參函式時,主呼叫函式不向被呼叫函式傳遞資料。無參函式一般用來執行指定的一組操作,無參函式可以帶回或不帶回函式值,但是一般是以不帶回函式值的居多
  • 有參函式,在呼叫函式時,主調函式在呼叫被調函式時,透過引數向被調函式傳遞資料,一般情況下,執行被呼叫函式時會得到一個函式值,供主調函式使用

怎樣定義函式

為什麼要定義函式

C語言要求,在程式中用到的所有函式,必須“先定義,後使用”

定義函式應包括以下幾個內容:

  • 指定函式的名字,以便以後按名呼叫
  • 指定函式的型別,即函式返回值的型別
  • 指定函式的引數的名字和型別,以便在呼叫函式時向它們傳遞資料。對無參函式不需要這項
  • 指定函式應完成什麼操作,也就是函式是做什麼的,即函式功能。這是最重要的,是在函式體中解決的

對於C編譯系統提供的庫函式,是由編譯系統事先定義好的,庫檔案中包含了對各函式的定義。程式設計者不必自己定義,只需用#include指令把有關的標頭檔案包含到本檔案模組中即可。在有關的標頭檔案中包含了對函式的宣告

庫函式只提供了最基本、最通用的一些函式,而不可能包括人們在實際應用中所用到的所有函式。程式設計者需要再程式中自己定義想用的而庫函式沒有提供的函式

定義函式的方法

定義無參函式

定義無參函式的一般形式為

型別名 函式名()
{
    函式體
}

型別名 函式名(void)
{
    函式體
}

函式名後面括號內的void表示“空”,即函式沒有引數

函式體包括宣告部分和語句部分

定義有參函式

定義有參函式的一般形式為:

型別名 函式名(形式參數列列)
{
    函式體
}

函式體包括宣告部分和語句部分

定義空函式

在程式設計中有時會用到空函式,它的形式為

型別名 函式名()
{}

函式體是空的。呼叫此函式時,什麼工作也不做,沒有任何實際作用

在程式設計中往往根據需要確定若干個模組,分別由一些函式來實現。而在第一階段只設計最基本的模組,其他一些次要功能或錦上添花的功能則在以後需要時陸續補上。在編寫程式的開始階段,可以在將來準備擴充功能的地方寫上一個空函式(函式名取將來採用的實際函式名)只是這些函式暫時還未編寫好,先用空函式佔一個位置,等以後擴充程式功能時用一個編寫好的函式代替它,這樣做,程式的結構清楚,可讀性好,以後擴充新功能方便,對程式結構影響不大。空函式在程式設計中常常是有用的。

相關文章