C語言 函式的概念及分類 定義 宣告 呼叫

2021-10-11 18:43:07 字數 2857 閱讀 5656

函式概念

函式是c語言的功能單位,實現乙個功能可以封裝乙個函式來實現。定義函式的時候一切以功能為目的,根據功能去定函式的引數和返回值。

函式的分類

1、從定義角度分類(即函式是誰實現的)

​ 1.庫函式(c語言實現的)

​ 2.自定義函式(程式設計師自己實現的函式)

​ 3.系統呼叫(作業系統實現的函式)

2、從引數角度分類

​ 1.有參函式:函式有形參,可以是乙個,或者多個,引數的型別隨便,完全取決於函式的功能。

​ 2.無參函式:函式沒有引數,在形參列表的位置寫乙個 viod 或什麼都不寫。

3、從返回值角度分類

​ 1.帶返回值的函式:在定義函式的時候,必須帶著返回值型別,在函式體裡,必須有 return ,如果沒有返回值型別,預設返回整型。

注:1.在定義函式的時候,函式的返回值型別,到底是什麼型別取決於函式的功能

​ 2.沒有返回值的函式:在定義函式的時候,函式名字前面加 void ,在函式裡不需要 return。如果想結束函式,返回到被呼叫的地方,return ;什麼都不返回就可以了。

函式的定義

1、函式的定義方法

返回值型別 函式名字(形參列表)

注意:形參必須帶型別,而且以逗號分隔。函式的定義不能巢狀,即不能在乙個函式體內定義另乙個函式。

函式的宣告

1、對已經定義的函式,進行說明,函式的宣告可以宣告多次

2、為什麼要宣告:有些情況下如果不對函式進行宣告,編譯器在編譯的時候,可能不認識這個函式,以為編譯器在編譯c程式的時候,從上往下編譯的。

3、宣告的方法:什麼時候需要宣告,主函式和被調函式在同乙個 .c檔案的時候;(1)、被調函式在上,主函式在下,這種情況下不需要宣告。(2)、被調函式在下,主調函式在上,這種情況編譯器從上往下編譯,在 main 函式(主調函式),不認識被調函式,需要宣告。

直接宣告:將被調函式的第一行拷貝過去,後面加分號

間接宣告:將函式的宣告放在標頭檔案中, .c程式包含檔案即可。

主調函式和被調函式不在同乙個 .c檔案的時候一定要宣告。直接宣告將被調函式的第一行拷貝過去,後面加分號,前面加 extern。間接宣告將函式的宣告放在標頭檔案中, .c程式包含檔案即可。

函式的呼叫

函式的呼叫方法

變數=函式名(實參列表);//帶返回值的

函式名(實參列表); //不帶返回值的

1、有無返回值

​ 1.有返回值的,根據返回值的型別,需要在主函式中定義乙個對應型別的變數,接收返回值

​ 2.沒有返回值的函式,不需要接收返回值

2、有無形參

函式名(實參列表);//帶形參的

函式名();//沒有形參的

注意:實參,可以常量,可以變數,或者表示式。形參變數,是被調函式的區域性變數。

函式總結

c語言編譯過程

1、預編譯:將 .c中的標頭檔案展開、巨集展開,生成的檔案是 .i檔案

2、編譯:將預處理之後的 .i檔案生成 .s彙編檔案

3、彙編:將 .s彙編檔案生成 .o目標檔案

include

#iniclude<> //用尖括號包含標頭檔案,在系統指定的路徑下找標頭檔案。

#include"" //用雙引號包含標頭檔案,閒雜當前目錄下找標頭檔案,找不到,再到系統指定的路徑下找。

注意:include 經常用來包含標頭檔案,可以包含 .c檔案,但盡量不要包含 .c。因為include包含的檔案會在預編譯被展開,如果乙個 .c被包含多次,展開多次,會導致函式重複定義,所以不要包含 .c檔案。

注意:預處理只對 include等預處理操作進行處理並不會進行語法檢查,有語法錯誤也不會報錯,在編譯階段才進行語法檢查。

defiine

巨集定義用 define 去定義,巨集是在預編譯的時候進行替換。

1、不帶參巨集

#define 識別符號 字串
在預編譯的時候如果**出現了識別符號就用字串去替換。

巨集的優點:只要修改巨集定義,其他地方在預編譯的時候就會重新替換。

注意:巨集定義之後不要加分號

如果想在中間終止巨集的的定義範圍使用 #undef 識別符號

2、帶參巨集

#define 巨集名(形參) 字串
注意:帶參巨集的形參沒有型別名

巨集名(實參)將來在預處理的時候替換成實參替代字串中的形參,其他字元保留。

注意:帶參巨集是在預處理的時候進行替換

3、帶參巨集和帶參函式的區別

帶參巨集被呼叫多次就會展開多次,執行**的時候沒有函式呼叫的過程,不需要壓棧彈棧。所以帶參巨集是浪費了空間,因為被展開多次,節省時間。

帶參函式,**只有乙份,存在**段,呼叫的時候去**段取指令,呼叫的的時候需要壓棧彈棧。有個呼叫的過程。所以說,帶參函式浪費時間,節省空間

帶參函式的形參是有型別的,帶參巨集的形參沒有型別名。

選擇性編譯

#ifdef ***

**一#else

**二#endif

如果在當前 .c ifdef之前定義過***,就編譯**一,否則編譯**二。

注意:和if……else語句的區別,if……else語句都會被編譯,通過條件選擇性執行**,而選擇性編譯,只有一塊**被編譯。

#ifndef ***

**一#else

**二#endef

和第一種互補。這種方法,經常用在防止標頭檔案重複包含。

3、

#if 表示式

程式一#else

程式二#endif

如果表示式為真,編譯第一段**,否則編譯第二段**。選擇性編譯都是在預編譯階段處理的。

python函式之函式的概念及定義

1.函式就是完成特定功能的 的集合,這組 可以作為乙個單位使用,並且給他取乙個名字。可以通過函式名在程式的不同地方多次執行。函式呼叫 2.為什麼要使用函式?1 降低程式設計的難度。通常將乙個複雜的大過程分解成n個小過程,然後將小過程劃分成更小的過程,當過程細化為足夠簡單時,我們就可以分而治之。各個小...

C語言函式的定義和宣告。

函式的定義 函式的定義就是函式體的實現。函式體就是乙個 塊,它在函式被呼叫時執行,與函式定義相反的是,函式宣告出現在函式被呼叫的地方。函式宣告向編譯器提供該函式的相關資訊,用於確保函式被正確的呼叫。那麼函式到底是如何定義的呢?請看下面的語法 型別 函式名 形式引數 塊最簡單的 function na...

軟體測試的概念及分類

一 軟體測試相關概念 1.軟體測試的定義 a.ieee 標準的定義 使用人工或自動的手段來執行或測定某個系統的過程,其目的在於檢驗 它是否滿足規定的需求或是弄清預期結果與實際結果之間的差別。b.g.j.myers給出的定義 程式測試是為了發現錯誤而執行程式的過程 2.軟體測試流程分析 2 1 軟體測...