《c陷阱與缺陷》第四章--連線
4.1、什麼是聯結器
聯結器是將多個通過編譯器編譯後的c源程式,連線成乙個載入模組
4.2、宣告和定義
變數定義:用於為變數分配儲存空間,還可為變數指定初始值。程式中,變數有且僅有乙個定義。
變數宣告:用於向程式表明變數的型別和名字,宣告不分配空間。
extern
int i //宣告
int i //定義
乙個變數可以宣告多次,只能定義一次。
在程式的乙個地方使用extern int temp 宣告了乙個變數temp,則在其他地方必須包括它的定義。
有關宣告和定義在程式設計時的注意事項:不要把變數定義放入.h檔案,這樣容易導致重複定義錯誤。
4.3、命名衝突與static修飾符
通過使用static修飾符修飾的變數和函式,作用域只在當前原始檔。為了避免可能出現的命名衝突,只在當前作用域有用的都要設定成static。
4.4、形參,實參和返回值
如果乙個函式在定義宣告之前被呼叫,則函式預設的返回值為int
#include
intmain
(void)
double
hello
()#include
intmain
(void)
inthello
()
乙個函式中的形參中如果沒有float,short,char型別的引數,那麼在函式宣告時可以省略引數型別的說明,例如:
#include
//此處省略了引數型別
double
square();
intmain
(void)
double
square
(double x)
4.5、檢查外部型別
1,變數的外部引數變數與內部引數變數不一致(宣告和定義的型別不同),會引起程式問題。比如:
//由於陣列和指標取值方式的不同(指標為間接定址),以下兩個宣告不統一會引起很大問題。
extern
char *n;
char n;
2,外部函式的返回值和內部的函式返回值不同。由於返回值的不同,在呼叫時也會發生無法**的錯誤。
4.6,標頭檔案
為了避免錯誤,可以將宣告都寫在乙個.h標頭檔案中。使用這個外部變數就要包括這個標頭檔案。
C 第四章習題
1 定義乙個複數類complex,過載運算子 使之能用於複數的加法運算。將運算子函式過載為非成員 非友元的普通函式。程式設計序,求兩個複數之和。2 定義乙個複數類complex,過載運算子 使之能用於複數的加減乘除。運算子過載函式作為complex類的成員函式。程式設計序,分別求兩個複數之和 差 積...
C 第四章 陣列
二維陣列 陣列是一組相同元素的集合.陣列的建立方式 type t arr name const n type t 是指數組的元素型別 const 是乙個 常量表示式,用來指定陣列的大小 陣列建立的例項 1 int arr1 10 2 int count 10 int arr2 count 3 cha...
C語言第四章
4.2 用if語句實現選擇結構 4.2.1 用if語句處理選擇結構舉例 4.5條件運算子和條件表示式 4.6 選擇結構的巢狀 4.7用switch語句實現多分支選擇結構 4.8 選擇結構程式綜合舉例 4.1 選擇結構和條件判斷 4.2 用if語句實現選擇結構 4.2.1 用if語句處理選擇結構舉例 ...