第4章 函式與程式結構(筆記)

2021-05-27 11:45:44 字數 1921 閱讀 8524

c語言在設計中考慮函式的高效性與易用性。

乙個程式可以儲存在乙個或多個原始檔中,各個檔案可以單獨編譯,並可以和庫中已編譯過的函式一起載入。

ansi標準對c語言所做的最明顯的修改是函式宣告與函式定義兩方面 。

4.1 函式的基本知識

如果函式定義中省略了返回值型別,則預設認為是int型別。

4.2 返回非整型值的函式

4.3 外部變數

由於c語言不允許在乙個函式內部定義其他函式,因此函式本身是「外部的」。

外部變數與函式具有下列性質:通過同乙個名字對外部變數的所有引用,實際上都是引用同乙個物件。

外部變數的用途還表現在他們與內部變數相比具有更大的作用域和更長的生存期。

4.4 作用域規則

乙個外部變數只能在某乙個檔案中定義一次,而其他檔案可以通過extern宣告來訪問它。

外部變數的定義中必須指定陣列的長度,但extern宣告則不一定要制定陣列的長度。

4.5 標頭檔案

4.6 靜態變數

通過static限定外部物件,可以達到隱藏外部物件的目的。

static限定的內部變數與自動變數不同,不管其所在的函式是否被呼叫,它一直存在,而不像自動變數那樣,

隨著所在函式的被呼叫和退出而存在和消失。

4.7 暫存器變數

register宣告告訴編譯器,所宣告的變數在程式中使用頻率較高。其思想是,將register變數放在機器的暫存器

中,可以使程式更小,執行速度更快。

register只適用於自動變數以及函式的形式引數。實際使用時,底層硬體環境的實際情況對暫存器變數的使用會有一些限制。

無論暫存器變數實際上是不是存放在暫存器中,它的位址都是不能訪問的。

4.8 程式塊結構

在函式中可以以程式塊的形式定義變數。

這種方式宣告的變數可以隱藏程式塊外與之同名的變數,它們之間沒有任何關係,並在右花括號出現之前一直存在。

如:if (n > 0)

變數i的作用域就是if語句的「真」分支,與程式塊外的i無關。

程式塊內的自動變數(包括形式引數)也可以隱藏同名的外部變數和函式。

int x;

int y;

f(double x)

在乙個好的程式風格中,應該避免出現變數名隱藏外部作用域中相同名字的情況。

4.9 初始化

在不進行顯示初始化的情況下,外部變數和靜態變數都將被初始化為0,而自動變數和

暫存器變數的初值則沒有定義。外部和靜態變數只初始化一次,自動和暫存器變數每次

進入函式或程式塊時都被初始化。

4.10 遞迴

4.11 c預處理器

兩個最常用的的預處理器指令是:#include 在編譯期間把指定檔案的內容包含進當前檔案中。

#define指令,用任意字串行替代乙個標記。

4.11.1 檔案包含

如果用引號引起來,則在原始檔所在位置查詢該檔案,如果沒有找到,或者如果檔案用尖括號括起來

則根據相應的規則查詢檔案。

4.11.2 巨集替換

如果對各種型別的引數的處理都是一致的,則可以將同乙個巨集定義應用於任何資料型別。

引數名以#作為字首則結果將擴充套件為實際引數替換該引數的帶引號的字串。

#define dprint(expr) printf(#expr " = %g\n", expr)

4.11.3 條件包含

#if語句對其中的常量整型表示式(不能包含sizeof,型別轉換運算子或enum常量)進行求值。

函式與程式結構

4 標頭檔案 5 初始化 6 c預處理器 函式定義形式如下 函式定義 返回值型別 函式名 引數宣告表 return語句 return exp 程式 可以看作變數定義和函式定義的集合。函式之間的通訊可以通過引數 函式返回值以及外部變數進行。被呼叫函式通過return語句向呼叫者返回值。return語句...

C C學習筆記 函式與程式結構

返回值型別函式名 引數宣告表 宣告和語句 函式定義不能位於另乙個函式體內。如果函式定義中省略了 返回值型別 則預設為 int 型。被呼叫函式通過return語句向呼叫著返回值,return語句的後面可以跟任何表示式 return 表示式 必要時,表示式將被轉換為函式的返回值型別。表示式兩邊的括號可選...

筆記 C語言 函式與程式結構

函式的定義形式如下 返回值型別 函式明 引數宣告表 函式定義中的各構成部分都可以省略。最簡單的函式如下所示 dummy 該函式不執行任何操作也不返回任何值。這種不執行任何操作的函式有時很有用,它可以在 程式開發期間用以保留位置 留待以後填充 如果函式定義中省略了返回值型別,則默 認為 int 型別。...