函式概念
函式是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 軟體測...