如同實驗一所介紹C語言程式的架構是由被稱為是函式(function)的構建方塊(building block)所組成。 撰寫C語言程式的步驟是1.先撰寫函式,然後再2.將函式組合成程式。函式組合的方式是透過上層呼叫下層以及下層結束再到上層的方式來互動。以下我們先介紹函式的組建以及執行,然後再介紹函式間變數讀寫隔離與變數內容交換。
函式組建以及執行
函式基本上是由一段可重覆執行的程式碼包裝組成。 另外,當有需要執行這一段程式碼時,他也提供了一種標準格式來表達該段程式碼需要被執行,也就是呼叫這個函式的方式。 如果函式本身,與呼叫函式的函式是被存放在同一個檔案內,那基本上編譯器可以很輕鬆的比對確認呼叫與被呼叫之間的格式是相吻合的。
但是由於撰寫函式的目的讓這段程式碼將來可重覆使用,所以在函式撰寫除錯編譯完成之後存檔,再於需要時撰寫另外的應用程式呼叫這個函式鏈結它的機會很多。也就是說,大部份呼叫函式的程式段,與被呼叫的函式會存放在不同的檔案之中,並被分批編譯(compile)。最後再鏈結(link)起來執行。這時在鏈結呼叫與被呼叫的函式時,並無函式原始碼所提供的參數型態可做參考,以比對確認呼叫方式與被呼叫函式參數型態吻合。
標準的函式組織建構(function)
本單元接續實驗一的說明並提供更多的細節如下:
return_type function_name(type1 variable1,type2 variable2,...)
{
variable declarations block
instruction sets block
}
其中return_type為回傳值的資料型態,function_name 為函式的名稱,(...) 內為在呼叫這個函式時必須要先準備的輸入參數列表,這個列表中,每一個參數,會先有它的型態type1,type2 然後再接它的變數名稱variable1, variable2 。 大括號{...} 內所包涵的各行則為函式的主體,會由多行C指令共同組成,主體至少會分為兩個區塊,1.變數型態宣告區塊(variable declarations block) 進行變數型態的宣告,準備好存放呼叫輸入值以及運算中暫存值的變數空間。2.指令集區塊(instruction sets block)則負責執行運算函式內的程式運算工作。
例如:
float square(float x){
float y;
y=x*x;
return(y);
}
這函式接收呼叫者提供浮點數格式的輸入值,存進浮點變數x 中,並且在變數宣告區塊中定義出浮點變數y以備存放平方值,然後在程式碼區塊執行平方運算y=x*x,最後將運算結果以return(y)送回給呼叫者。呼叫函式使用的參數,型態要與 x 一樣是浮點數,但名稱可以是任何浮點數變數,在return(y)中被送回的變數值y 型態,必須與所宣告的型態return_type 相吻合。這段程式原始碼,會被存放在程式檔xxx.c 之中。