最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

1. CPP 是如何工作的

2023-07-17 16:52 作者:居苦痛人  | 我要投稿

§1 第一個(gè)程序:Hello World

程序源碼與解釋

程序源碼

#include 指令 #include 指令用于搜索引用在 < > 內(nèi)的文件, ?并將該文件復(fù)制粘貼到源文件中. 上例中所尋找的文件便是 iostream, 該文件聲明了 cout, cin 等函數(shù).

main() 函數(shù) main() 函數(shù)是整個(gè) CPP 程序的入口, main() 函數(shù)結(jié)束時(shí), 程序便結(jié)束了.

在 C 語言的基礎(chǔ)上, 容易知道, CPP 的 main() 函數(shù)的返回值為 int 類型, 即一個(gè)整數(shù). 然而, 程序源碼中并未使用 return 語句說明返回值, 而對一般的返回值非 void 的函數(shù), 這是非法的. 事實(shí)上, ?在 CPP 中, 對 main() 函數(shù)而言, 若未使用 return 語句返回一個(gè)整數(shù), 它會(huì)默認(rèn)以 0 作為返回結(jié)果.

Pic.1 CPP main() 函數(shù)默認(rèn)返回值

重載運(yùn)算符與 CPP 流式輸出 重載運(yùn)算符是 CPP 區(qū)別于 C 的一大新特性. CPP 允許將一些已有定義的運(yùn)算符重載為用于新運(yùn)算的運(yùn)算符. 上例中, << 這個(gè)左移運(yùn)算符被重載為輸出運(yùn)算符, 用于在屏幕上打印出字符串.

事實(shí)上, 所謂的重載運(yùn)算符, 本質(zhì)上是一個(gè)函數(shù). 所以上例中的輸出代碼還可以改寫為

這段代碼 (以及程序源碼 中的輸出代碼) 的作用是向 std::cout, 即 CPP 輸出流中推送字符串 Hello, World! 和行換行符.

其他處理 為防止程序在打印語句后直接關(guān)閉終端窗口 (由于速度過快以至于看不清輸出是否正確), 可通過

解決. 該函數(shù)等待我們輸入任意一個(gè)字符, 在執(zhí)行完該函數(shù)后, 程序?qū)⒔Y(jié)束運(yùn)行.

通過 Visual Studio 編譯運(yùn)行它

在建立完一個(gè)空項(xiàng)目并確定好其位置后, 有以下幾種方式編譯單個(gè)文件.

  1. 快捷鍵 Ctrl + F7.

  2. 工具欄的編譯按鈕.

除此外, 由于該項(xiàng)目目前只有一個(gè)文件 (一般命名為 Main.cpp), 所以也可以直接編譯項(xiàng)目而不用擔(dān)心鏈接錯(cuò)誤.

  1. 右鍵項(xiàng)目并點(diǎn)擊生成.

  2. 快捷鍵 Shift + F7.

§2 CPP 程序的編譯過程

預(yù)處理

上述源碼將送至編譯器中編譯為可執(zhí)行二進(jìn)制碼.

在編譯之前, 當(dāng)編譯器讀到 # 時(shí), 將認(rèn)定該語句為預(yù)處理指令, 并執(zhí)行預(yù)處理.

預(yù)處理指令 以 # 開頭的, 只占一行的語句. 它總是出現(xiàn)在 CPP 程序開頭.

預(yù)處理 在編譯前對預(yù)處理指令的執(zhí)行過程.

編譯

在編譯階段, 程序?qū)⒃闯绦虼a轉(zhuǎn)換為二進(jìn)制碼.

Visual Studio 中的編譯配置 在 Visual Studio 中, 編譯配置分為兩個(gè)重要的部分,

  1. 解決方案配置. 其存在兩個(gè)默認(rèn)選項(xiàng): Debug 和 Release.

  2. 解決方案平臺(tái). 其存在多個(gè)默認(rèn)選項(xiàng), 這取決于用戶配置的開發(fā)平臺(tái)的多少. 僅對 Windows 平臺(tái)開發(fā)而言, 它分為 x64 和 x86 (WIN32) 兩種, 前者表示 64 位系統(tǒng)程序, 后者表示 32 位系統(tǒng)程序.

解決方案配置實(shí)質(zhì)上是構(gòu)建項(xiàng)目時(shí)的一系列規(guī)則, 而解決方案平臺(tái)是指該項(xiàng)目運(yùn)行的目標(biāo)平臺(tái).

其他詳細(xì)信息, 請參考 Microsoft Visual Studio 幫助文檔.

為何 Debug 要比 Release 慢 對 Visual Studio 而言, Debug 默認(rèn)關(guān)閉代碼優(yōu)化, 而 Release 總是以最大速度優(yōu)化. 前者對代碼調(diào)試是有好處的.

編譯器的編譯對象 項(xiàng)目中的每個(gè) CPP 文件都將被編譯, 而頭文件不會(huì). 事實(shí)上, 所用的頭文件將會(huì)在預(yù)處理后被復(fù)制在各個(gè)包含了它們的 CPP 中, 從而與 CPP 一同被編譯.

在 Visual Studio 中, 項(xiàng)目中的每個(gè) CPP 文件都將被編譯為 .obj 文件 (目標(biāo)文件 Object File).

鏈接

編譯器將所有 CPP 源文件編譯為獨(dú)立的目標(biāo)文件. 然而, 一個(gè)項(xiàng)目大多只需要一個(gè)可執(zhí)行文件, 將這些獨(dú)立的目標(biāo)文件按照一定順序合并為一個(gè)可執(zhí)行文件, 便是鏈接器的工作.

為了進(jìn)一步說明鏈接, 試作如下例子

聲明 在 CPP 中, 任何符號都需要聲明. cout, cin 等等已經(jīng)在 iostream 文件中聲明. 因此, 只有通過 #include 指令包含 iostream 才能使用 cout, cin 等. 聲明用于告知編譯器對象對象存在.

聲明的寫法很簡單

只需要告知函數(shù)名, 函數(shù)返回值類型和函數(shù)的參數(shù)類型列表即可.

定義 定義是指一個(gè)函數(shù)所實(shí)現(xiàn)的具體功能. 這個(gè)具體功能將被放在函數(shù)體, 即兩個(gè)花括號 { } 之間的位置.

鏈接錯(cuò)誤 當(dāng)鏈接器找不到已經(jīng)聲明并調(diào)用的函數(shù)所在位置時(shí), 將會(huì)告知鏈接錯(cuò)誤. (將上述 Log.cpp 中的 Log() 函數(shù)名修改即可復(fù)現(xiàn)該類錯(cuò)誤.)

Pic.2 鏈接錯(cuò)誤

鏈接錯(cuò)誤分為以下幾部分:

  1. 說明該符號無法解析. 因?yàn)榫幾g器先解析該符號, 然后去尋找它的位置.

  2. 調(diào)用該符號的系統(tǒng)內(nèi)部命名.


1. CPP 是如何工作的的評論 (共 條)

分享到微博請遵守國家法律
合阳县| 曲周县| 汝州市| 开封市| 集安市| 安化县| 定远县| 新乐市| 海林市| 承德县| 高密市| 河间市| 石嘴山市| 南城县| 临漳县| 阜新市| 宁乡县| 阳新县| 娱乐| 泰来县| 云浮市| 乌拉特后旗| 桂林市| 兴隆县| 宁南县| 宜阳县| 定边县| 方山县| 武功县| 龙南县| 乡城县| 泸西县| 佛学| 齐齐哈尔市| 金堂县| 定州市| 绥中县| 西峡县| 得荣县| 梁平县| 房山区|