關(guān)于C++的.cpp文件運(yùn)行全過程
.cpp文件運(yùn)行全過程
今天來寫一寫.cpp文件是怎么一步一步變成.exe文件的,以便更好的理解C++內(nèi)核
第一步
先用編輯器編輯好源代碼文件,也就是.cpp文件
int main() {}
然后是對(duì)該文件進(jìn)行預(yù)處理,也就是常用的三個(gè)預(yù)處理命令(此三者嚴(yán)格意義上不算是C++的語句):
文件包含:將該文件內(nèi)容合并到源代碼中
#include <iostream>
條件編譯:有時(shí)候一個(gè)頭文件可以引入另外一個(gè)頭文件,條件編譯防止頭文件的重復(fù)包含和編譯
#ifndef __PERSON_H__?? ??? ?// 如果這個(gè)頭文件沒有被包含 #define __PERSON_H__?? ??? ?// 就包含這個(gè)頭文件并且定義這個(gè)變量 #endif
宏定義:宏不占內(nèi)存,編譯器在編譯之前對(duì)源代碼做一些文本替換的處理
#define MAXSIZE 100
第二步
對(duì)該文件中的內(nèi)容進(jìn)行詞法、語法分析,然后轉(zhuǎn)化成二進(jìn)制文件(.obj&.o文件后綴)
之后把二進(jìn)制文件(.obj&.o文件后綴)和靜態(tài)鏈接庫(.lib&.a文件后綴)進(jìn)行合成為.exe文件
靜態(tài)鏈接庫:可以看做是自己寫的.h文件生成的.lib(Windows)或者.a(Linux&Unix)文件
第三步
運(yùn)行.exe文件,并在過程中加載動(dòng)態(tài)鏈接庫(.dll文件后綴)
動(dòng)態(tài)鏈接庫:通過外部引入的.dll配置文件,如數(shù)據(jù)庫,如opencv等等
附:
靜態(tài)鏈接庫比動(dòng)態(tài)鏈接庫更耗內(nèi)存,靜態(tài)鏈接庫是由多個(gè)文件組成的,運(yùn)行過程中,分別在內(nèi)存中開辟不同的內(nèi)存空間;而動(dòng)態(tài)內(nèi)存都只在一塊內(nèi)存中進(jìn)行存儲(chǔ)
在一個(gè)工程中如何單獨(dú)運(yùn)行一個(gè)cpp文件
在我們使用visual studio 2019的時(shí)候,一個(gè)工程下面會(huì)包含很多源文件(.cpp),如何單獨(dú)運(yùn)行其中一個(gè),我這里有兩種方式:
第一種是禁用其它的.cpp
- 第一步:在.cpp文件右擊選擇屬性
- 第二步:在從生成中排除選擇是
- 第三步:點(diǎn)擊確認(rèn)
將要除運(yùn)行外的其它.cpp文件禁用。
第二種是注釋
將除運(yùn)行外的其它.cpp文件中的main()函數(shù)注釋掉,這樣就可以只運(yùn)行一個(gè).cpp文件。
這兩種方式僅針對(duì)于剛剛開始學(xué)習(xí)C++的人。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
深入解析C++編程中__alignof 與__uuidof運(yùn)算符的使用
這篇文章主要介紹了C++編程中__alignof 與__uuidof運(yùn)算符的使用,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-01-01c++創(chuàng)建二維動(dòng)態(tài)數(shù)組與內(nèi)存釋放問題
這篇文章主要介紹了c++創(chuàng)建二維動(dòng)態(tài)數(shù)組與內(nèi)存釋放問題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-06-06C++實(shí)現(xiàn)LeetCode(98.驗(yàn)證二叉搜索樹)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(98.驗(yàn)證二叉搜索樹),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C語言中邏輯運(yùn)算符與條件運(yùn)算符的學(xué)習(xí)教程
這篇文章主要介紹了C語言中邏輯運(yùn)算符與條件運(yùn)算符的學(xué)習(xí)教程,條件運(yùn)算符問號(hào)即三目運(yùn)算符使用起來十分方便,需要的朋友可以參考下2016-04-04實(shí)例詳解C/C++中extern關(guān)鍵字
這篇文章主要介紹了C/C++中extern關(guān)鍵字詳解 的相關(guān)資料,需要的朋友可以參考下2016-04-04Qt基礎(chǔ)開發(fā)之Qt多線程類QThread與Qt定時(shí)器類QTimer的詳細(xì)方法與實(shí)例
這篇文章主要介紹了Qt基礎(chǔ)開發(fā)之Qt多線程類QThread與Qt定時(shí)器類QTimer的詳細(xì)方法與實(shí)例,需要的朋友可以參考下2020-03-03