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