extern int i; //declares but does not define i
int i //declares and defines i
extern宣告不是定義,也不分配儲存空間。事實上,它只是說明變數定義在程式的其他地方。程式中變數可以宣告多次,但只能定義一次。
如果宣告有初始化式,那麼它可被當做是定義,即使宣告變數為extern:
extern double pi = 3.1416 //definition
只有當extern宣告位於函式外部時,才可以含有初始化式。
因為已初始化的extern宣告被當做是定義,所以該變數任何隨後的定義都是錯誤的:
extern double pi = 3.1416 //definition
double pi; //error:redefinition of pi
設計標頭檔案需要注意:標頭檔案所作的宣告在邏輯上應該是適於放在一起的。編譯標頭檔案需要一定時間。如果標頭檔案太大,程式設計師可能不願承受包含該標頭檔案所帶來的編譯時代價。
為了減少處理標頭檔案的編譯時間,有些c++實現支援預編譯標頭檔案 p58
常量在定以後不能修改,所以定義時比如初始化: p49
const int i=0;
在全域性作用域裡定義的非const變數時,它在整個程式中都可以訪問。
//file_1.cc
int counter; //definition
//file_2.cc
extern int counter; //uses counter from file_1
++counter; //increments counter defined in file_1
與其他變數不同,除非特別說明,在全域性作用域宣告的const變數是定義該物件的檔案的區域性變數。此變數只存在於那個檔案中,不能被其他檔案訪問。
通過指定const變數為extern,就可以在整個程式中訪問const物件,就可以在整個程式中訪問const物件:
//file_1.cc
extern const int bufsize=fcn();
//file_2.cc
extern const int bufsize; //uses bufsize from file_1
for (int index=0;index != bufsize;++index)
//...
本程式,file_1.cc通過函式fcn()返回值來定義和初始化bufsize。而bufsize定義為extern,也就意味著bufsize可以在其他檔案中使用
what enum:定義了整數常量集合(與const不同,它把相同概念的常量分為乙個組)
how 定義enum以及enum成員:
預設地,第乙個列舉成員賦值為0,後面每個列舉成員賦值的值比前面大1
可以為乙個或多個列舉成員提供初始值,
用來初始化列舉成員的值必須是乙個常量表示式
enum forms; //shape=1,sphere=2,cylinder=3,polygon=4
在列舉型別forms中,顯示將shape賦值為1,其他列舉成員隱式初始化
enum points; //point2d=2,point2w=3,point3d=3,point3d=4
不能改變列舉成員的值。列舉成員本身就是乙個常量表示式,所以也可用於需要常量表示式的任何地方
每個enum都定義了一種新的型別。列舉型別物件的初始化或賦值,只能通過其列舉成員或同一列舉型別的其他物件來進行
points pt3d=point3d; //ok
points pt2w=3; //error
注意:把3賦值給points物件是非法的,即使3與乙個points列舉成員相關聯
c++自動將列舉型別的物件或列舉成員轉換為整型,其轉換結果可用於任何要求使用整數值的地方。
將enum物件或列舉成員提公升為什麼型別由機器定義,並且依賴於列舉成員最大值。但至少提公升為int型。 p157
在使用有列舉型別形參的過載函式時,請記住:由於不同列舉型別的列舉常量值不相同,在函式過載確定過程中,不同的列舉型別會具有完全不同的行為。其列舉成員決定了它們提公升的型別,而所提公升的型別依賴於機器。 p235
C primer(第四版)讀書筆記2
以下幾種情況都可能引發執行時或編譯時錯誤 1 delete不是new分配的空間 2 重複delete new分配的空間兩次以上 3 在釋放動態陣列時忘了方括號對 inti int pi i delete pi vs 2008 會執行時錯誤 string str dwarves delete str ...
C Primer中文版第四版 讀書筆記
2011.8.10 p46 只有當extern 宣告位於函式外部時,才可以含有初始化式。extern double pi 3.1416 pi 是乙個全域性變數,這是乙個定義 p50 在全域性作用域宣告的const 變數是定義該物件的檔案的區域性變數 僅作用在該檔案中 要使 const 變數能夠在其他...
C Primer 第四版讀書筆記(五)之語句
通常情況下,語句是順序執行的。但是,除了最簡單的程式外,只有順序執行往往並不足夠。為此,c 定義了一組控制流語句,允許有條件地執行或者重複地執行某部分功能。1.1 簡單語句 c 中,大多數語句以分號結束。表示式語句用於計算表示式。1.2 宣告語句 在c 中,物件或類的定義或宣告也是語句。1.3 復合...