C++主流預處理,編譯和鏈接過程

在C++的程序的編寫過程中,基本上都碰到過LNK2005的錯誤吧,下面就針對這個問題詳細分析:
  首先,預處理階段:
這一過程,主要針對#include和#define進行處理,具體過程如下:
對于cpp文件中經常會出現#include來包含某個頭文件,在進行預處理之后,所有的#include命令都將替換成該頭文件中的詳細內容,如果該頭文件中還包含另外的頭文件,采用同樣的方法進行遞歸處理。同樣#define亦是如此,對用它進行宏定義的字符進行替換,這里就是簡單的替換。所以整個預處理過程就是進行簡單的替換。
  其次,預編譯過程
這一過程主要針對預處理之后的cpp文件編譯稱為obj文件,即目標文件(注意,在這里僅僅是針對cpp文件,對頭文件是不做任何處理的,所以在多文件工程中定義全局變量的時候,我們一定要記得把全局變量定義在cpp文件中,因為如果定義在頭文件中,我們要使用該變量的話很容易出現already define的錯誤)。主要是通過編譯器和匯編器生成二進制文件,便于鏈接處理。
  對于這個,我給個實例和其解釋:
在鏈接的過程中,用extern申明的變量,我們很明確的知道這是一個外部變量,那么對于此,連接器會到外部的obj文件中區尋找該變量,如果說是我們在該obj文件編譯的cpp中有該變量的定義的話,那么這就不是一個聲明了,而是一個定義。所以,我們的這個obj文件編譯的源文件cpp,千萬不要包含有該變量定義的頭文件或者cpp文件,否則就是重定義,也就是說有些重定義是在鏈接的時候才會確定的一個錯誤,所以最好是在.h文件中用extern進行聲明,然后再隨便一個cpp文件中進行定義。在你想要使用該變量的cpp文件中只需要包含該頭文件即可。
  第三,鏈接過程
如果寫程序中沒有足夠的警覺,在這個過程中極易出現鏈接錯誤。首先該過程主要是將眾多的obj文件生成exe文件。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451604.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451604.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451604.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

shell中sed -i特殊字符

可參考文獻: Linux生產環境上,最常用的一套“sed“技巧 看懂shell中的各種語句

Win10遠程桌面提示你的憑據不工作的處理方法

需要確保在組策略編輯器(WinR 輸入 gpedit.msc )中計算機配置->Windows設置->安全設置->本地策略->安全選項->右側的網絡訪問:本地帳戶的共享和安全模型。修改為使用經典模式即可!

子網掩碼255.255.0.0與255.255.255.0的區別

先介紹子網掩碼:子網掩碼,是一種用來指明一個IP地址的哪些位標識的是主機所在的子網,以及哪些位標識的是主機的位掩碼。子網掩碼不能單獨存在,它必須結合IP地址一起使用。子網掩碼只有一個作用,就是將某個IP地址劃分成…

日期格式不符合要求:Unparseable date: quot;3e8a4d83533744c698216535a65850c0quot;

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1. 報錯如題 2. 原因:使用token 記錄當前登陸用戶,token值已經過期。 HttpClientUtil.doPost(&…

Spring中都用到了哪些設計模式?

Spring 框架中用到了哪些設計模式: 工廠設計模式 : Spring使用工廠模式通過 BeanFactory、ApplicationContext 創建 bean 對象。 代理設計模式 : Spring AOP 功能的實現。 單例設計模式 : Spring 中的 Bean 默認都是單例的。 模板方法模式 : Spring 中 jdbcTemplat…

解決火車票網上訂票難的方案

春運是最熱的話題,買火車票是最流行的事情;網上訂票給大家帶來了極大的便利,但是由于各種原因,網上訂票成功率很低,至少比在淘寶上買東西困難多了。在下不才,試圖提出其解決方案。 問題:并發訪問…

小程序支付成功后跳轉頁面失敗

在安卓報錯 relaunch:fail can not invoka lelaunch in background,ios正常,換成別的跳轉方式即可轉載于:https://www.cnblogs.com/wang-xing/p/9488961.html

linux 中 ~/. 是什么意思

~代表你的/home/用戶明目錄假設你的用戶名是x,那么~/就是/home/x/.是代表此目錄本身,但是一般可以不寫所以cd ~/. 和cd ~ 和cd ~/效果是一樣的但是.后面有東西又是另外一個問題,點在文件名頭部,代表一個隱藏文件~/.local是你的主目…

Nginx 啟動報錯 “/var/run/nginx/nginx.pid failed”

問題: 重啟虛擬機后,再次重啟nginx會報錯: open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory) 解決方法: (1)進入 cd /usr/local/nginx/conf/ 目錄,編輯配置…

eclipse關閉討厭的菜單

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1. 不知道動哪了,開啟了這個菜單: 2. 很感謝群友幫我找到關閉方法,點擊 如下 按鈕: 然后就…

SSL加密工作原理RSA免密登錄原理

SSL 是一個安全協議,它提供使用 TCP/IP 的通信應用程序間的隱私與完整性。因特網的 超文本傳輸協議(HTTP)使用 SSL 來實現安全的通信。 在客戶端與服務器間傳輸的數據是通過使用對稱算法(如 DES 或 RC4)進行加密的。…

linux命令中cd / 和 cd ~

cd命令:切換當前目錄至其它目錄,比如進入/etc目錄,則執行 cd /etccd /: 在Linux 系統中斜杠“/”表示的是根目錄。 cd / ,即進入根目錄.cd ~命令是,進入用戶在該系統的home目錄,例如xz用戶,則進入/root/xz目…

h5頁面點擊事件ios沒反應 移動端兼容性問題

$(document).on("click",".動態添加的dom",function(){  console.log("11") }) //在ios里這里動態添加的dom點擊事件不會觸發,解決辦法:給觸發點擊事件動態添加的dom增加樣式,cursor:pointer |||||| 或者增加一個touch事件 ios…

我不知道的事——深克隆和淺克隆

推薦一部好電影《致命魔術》。(此處為植入廣告) 推薦理由:涉及人性。畫面不錯,劇情跌宕,亦魔亦幻(此處的”魔“為魔術的”魔“)。雖然女豬腳不盡如人意,但是男豬腳比較帥。而…

服務器搭建

2019獨角獸企業重金招聘Python工程師標準>>> 最近弄了個阿里云的服務器,想在上面搞點東西,故要搭建一套環境。登錄linux,在終端輸入 uname -a 即列出linux的內核版本號。(服務器網址:http://101.132.235.56…

mybatis內部類映射寫法

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1. B類是A類中的內部類。 2.  映射寫法: com.XXX.A$B , 注意A類和B類之間用 $ 表示內外關系,而不是常用的 …

集群,分布式,微服務的區別

參考文獻: 集群,分布式,微服務概念和區別理解 謝謝作者分享!

Linux bash總結(一) 基礎部分(適合初學者學習和非初學者參考)

第一部分 bash簡介 —— 對bash進行簡要介紹 第二部分 bash示例和書寫流程 —— 以一個簡單的bash為例,說明書寫、執行bash的流程 第三部分 bash基礎語法 —— 本章內容比較多,主要介紹if...else...條件判斷,for循環等等。對于有編…

用 Python 語言來寫游戲

每個程序員差不多都是從計算機愛好者開始的,尤其是那些令人心醉神迷的電腦游戲,不僅造就了整個游戲產業,推動了計算機行業軟硬件的升級,而且吸引了大量的愛好者最終加入了游戲軟件開發的行業。騰訊、網易、盛大、完美時空等公司的…

各種操作系統簡介和功能分析

Windows 開發商 Microsoft Windows98/me Windows2000/XP Windows Server2003 Windows Vista Windows98/me是基于MS-DOS的混合的16/32位操作系統正慢慢的退出PC舞臺了,2000/X P以及Server2003都是基于WindowsNT的32位操作系統,XP/Server2003已經有64位版本了。 Vista是微軟最…