C++ Primer

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,而全局變量不能設置權限


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章