2011.8.7
頭文件通過inclue預處理器(通常捆綁在編譯器中)指示符 而成爲我們程序的一部分
#include指示符讀入指定文件的內容,有兩種格式:
#include<some_file.h>: 表明這個文件是一個工程文件或標準頭文件,查找過程會檢查預定義的目錄
#include"some_file.h": 表明該文件是用戶提供的頭文件,查找該文件時從當前目錄開始
#ifndef #endif 檢查預編譯器常量在前面是否已經被定義
#ifdef #endif 指示符判斷一個預處理器常量是否已定義, 以便有條件地包含程序代碼
編譯c++程序時,編譯器自動定義了一個預處理器名字__cplusplus c是__STDC__
比較有同的預定義名字:__LINE__, __FILE__, __TIME__. __DATE__
assert()是C語言標準庫中提供的一個通用宏處理器宏
#include<assert.h>
#include<cassert>
using namespace std;
庫文件廠商用名字空間來控制全局名字空間污染(即名字衝突)問題 ,以避免他們的庫污染了用戶程序的名字空間
輸入/輸出流(iostream )庫:cin cout cerr
文件輸入/輸出 (fstream )庫
C++內置數據類型 :int float double boolean char
標準庫 : 字符串、複數、vector
在內置數據類型與標準庫類的類型之間是複合類型 ,特別是指針和數組
靜態內存分配 :在程序執行之前進行的
靜態對象是有名字的變量,直接對其操作;動態對象是沒有名字的對象,通過指針間接操作
靜態對象的分配與釋放由編譯器自動處理。
int eval = 11;
int *p = &eval;
eval = eval + 1;
*p = *p + 1;
源文件和頭文件
源文件被直接編譯,也就是說源文件將直接被編譯爲obj文件。而頭文件如果沒有被任何源文件包含的話,將不會被編譯。
現在很多編譯器支持頭文件的預編譯,以提高編譯效率(尤其是對於STL頭文件,一堆函數在裏面)
gcc編譯源碼四個步驟:
1:預處理 :把包含的頭文件編譯進來
2:編譯 :檢查語法錯誤,確定代碼要做的工作
3:彙編 :把編譯階段輸出的.s文件轉換成二進制目標代碼
4:鏈接 :把彙編階段生成的.o文件鏈接成可執行文件
靜態變量 只在第一次進入函數的時候初始化,而全局變量 是進入程序的時候就初始化了,另外,全局變量是對整個程序可見的,靜態變量只在函數內可見。(如果是類的靜態變量的話,倒是可以用類名加變量名訪問,但是可以private,而全局變量不能設置權限 )