(1)預處理

我們需要的文件結構如上

main.cpp

add.h

add.cpp

add.h

這里使用riscv的工具鏈編譯為.i文件,需要使用-E,就是只進行預處理,我們可以得到兩個.i文件即main.i和add.i

main.i

這里看到main.i里頭文件全部替換,然后多了三萬多行

所以這部分純粹就是代碼插入,也就是說

對于C++編譯過程中預處理這一步來說,不區分頭文件來源。不論是標準庫的頭文件,還是我們自己寫的頭文件,預處理器處理它們的方式是相同的。預處理主要做以下幾件事:

  1. 宏定義展開:將所有的宏定義替換成相應的代碼。

  2. 文件包含處理:處理#include指令,將包含的頭文件內容插入到包含指令的位置。這里不區分標準庫頭文件和自定義頭文件,預處理器根據指定的搜索路徑查找頭文件,并將頭文件內容插入到源文件中。

  3. 條件編譯指令處理:處理#if#ifdef#ifndef#else#elif#endif等條件編譯指令。

  4. 移除注釋:將代碼中的注釋移除。

  5. 添加行標識和文件標識:預處理器還會添加行號和文件名標識,這對于編譯時的錯誤定位是非常有用的。

對于引入的頭文件,預處理器的處理流程大致如下:

  • 當遇到一個#include指令時,預處理器會查找指定的文件。
  • 如果是使用尖括號< >包圍的文件名,如#include <iostream>,預處理器通常在系統的標準庫路徑中查找。
  • 如果是使用雙引號" "包圍的文件名,如#include "myheader.h",預處理器首先在源文件的相同目錄下查找,如果沒有找到,再按照編譯器配置的搜索路徑查找,這通常包括系統的標準庫路徑。
  • 找到頭文件后,預處理器將頭文件的全部內容插入到#include指令的位置,然后繼續處理插入的內容。

簡而言之,不論頭文件的來源如何,預處理器的處理方式是一致的,都是將頭文件內容插入到源文件中,然后繼續進行宏展開、條件編譯處理等操作。

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

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

相關文章

Leetcode 3068. Find the Maximum Sum of Node Values

Leetcode 3068. Find the Maximum Sum of Node Values 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;3068. Find the Maximum Sum of Node Values 1. 解題思路 這一題雖然標記為一道hard的題目&#xff0c;但其實就是一個腦筋急轉彎的題目。 我們只需要想明白一點即可&…

4G/5G執法記錄儀、智能安全帽走國標GB28181接入海康、宇視等大平臺,也可走平臺與平臺對接,以下級平臺級聯到上級大平臺

AIoT萬物智聯&#xff0c;智能安全帽生產廠家&#xff0c;執法記錄儀生產廠家&#xff0c;智能安全帽、智能頭盔、頭盔記錄儀、執法記錄儀、智能視頻分析/邊緣計算AI盒子、車載DVR/NVR、布控球、智能眼鏡、智能手電、無人機4G補傳系統等統一接入大型融合通信可視指揮調度平臺VM…

Vue3和ElementPlus封裝table組件

最近學習vue3.2并自己在寫一個項目&#xff0c;然后發現好幾個頁面都是列表頁&#xff0c;重復寫table和column也是覺得累&#xff0c;學習的項目列表頁不算多&#xff0c;要是公司項目就不一樣了&#xff0c;所以就想著自己封裝一個table組件&#xff0c;免去大量重復工作和co…

滑動窗口

題目 思路 對于一個數組區間的最值&#xff0c;可以開辟一個隊列記錄&#xff08;當然這里不能叫隊列只是和隊列相似&#xff0c;習慣性叫法)。 每個區間的最值等于隊首元素。掃描數組時&#xff0c;如果該元素大于隊尾元素&#xff08;取最大值時&#xff09;將該隊尾元素出隊…

Effective C++ 學習筆記 條款07 為多態基類聲明virtual析構函數

有許多種做法可以記錄時間&#xff0c;因此&#xff0c;設計一個TimeKeeper base class和一些derived classes作為不同的計時方法很合理&#xff1a; class TimeKeeper { public:TimeKeeper();~TimeKeeper();// ... };class AtomicClock : public TimeKeeper { /* ... */ }; …

DM數據庫學習之路(二十)DM8基于主備集群技術的兩地三中心集群部署及測試(全網最詳細)

DM兩地三中心介紹 摘要 金融行業對數據的可靠性和連續性有著極其嚴格的要求,任何數據丟失或服務中斷都可能導致嚴重的經濟損失。針對這一問題,基于達夢主備集群技術的兩地三中心解決方案能夠切實有效解決業務數據的可靠性和連續性需求。該方案通過構建兩個數據中心和一個災備…

MyBatis標簽獲取數組或者集合長度的方法

1、判斷列表長度&#xff1a; <if test"list ! null and list.size() > 0">... </if> 可結合in條件使用&#xff1a;SELECT * FROM users<where><if test"idList ! null and idList.size() > 0">id IN<foreach item"…

leetcode熱題100學習計劃-鏈表-相交鏈表

思路 兩條鏈表長短不一&#xff0c;找公共交點必須先對齊。記錄兩個鏈表各自長度&#xff0c;長的向短的看齊&#xff0c;長的先走多出來的那么一截&#xff0c;之后兩者一起走&#xff0c;直到相遇或抵達末尾 代碼 /*** Definition for singly-linked list.* public class …

解密Lawnchair:打造個性化極致的Android桌面體驗

解密Lawnchair&#xff1a;打造個性化極致的Android桌面體驗 1. 簡介 Lawnchair是一款知名的Android桌面定制工具&#xff0c;旨在為用戶提供個性化極致的桌面體驗。作為一個開源項目&#xff0c;Lawnchair融合了簡潔、靈活和強大的特點&#xff0c;讓用戶能夠自由定制其Andro…

Python | Conda安裝包報錯:PackagesNotFoundError

Conda在下載安裝包時報錯&#xff1a; PackagesNotFoundError: The following packages are not available from current channels:- XXXXXX&#xff08;包名&#xff09;有如下兩種解決方法&#xff1a; 方法一&#xff1a;將conda-forge添加到搜索路徑上 在命令行運行下方指令…

深入理解C語言:開發屬于你的三子棋小游戲

三子棋 1. 前言2. 準備工作3. 使用二維數組存儲下棋的數據4. 初始化棋盤為全空格5. 打印棋盤6. 玩家下棋7. 電腦下棋8. 判斷輸贏9. 效果展示10. 完整代碼 1. 前言 大家好&#xff0c;我是努力學習游泳的魚&#xff0c;今天我們會用C語言實現三子棋。所謂三子棋&#xff0c;就是…

Android 開發環境搭建的步驟

本文將為您詳細講解 Android 開發環境搭建的步驟。搭建 Android 開發環境需要準備一些軟件和工具&#xff0c;以下是一些基礎步驟&#xff1a; 1. 安裝 Java Development Kit (JDK) 首先&#xff0c;您需要安裝 Java Development Kit (JDK)。JDK 是 Android 開發的基礎&#xf…

TS總結10、ts的 class 類型(配置項strictPropertyInitialization、非空斷言)

一、簡介 1.類(class)是面向對象編程的基本構件,封裝了屬性和方法 1.1、屬性的類型:類的屬性可以在頂層聲明,也可以在構造方法內部聲明,如果不給出類型;TypeScript 會認為x和y的類型都是any;如果聲明時給出初值,可以不寫類型,TypeScript 會自行推斷屬性的類型; c…

【Android 內存優化】怎么理解Android PLT hook?

文章目錄 前言什么是hook?PLT hook作用基本原理PLT hook 總體步驟 代碼案例分析方案預研面臨的問題怎么做&#xff1f;ELFELF 文件頭SHT&#xff08;section header table&#xff09; 鏈接視圖&#xff08;Linking View&#xff09;和執行視圖&#xff08;Execution View&…

2核4G服務器咋收費的?阿里云貴不貴?

阿里云2核4G服務器多少錢一年&#xff1f;2核4G配置1個月多少錢&#xff1f;2核4G服務器30元3個月、輕量應用服務器2核4G4M帶寬165元一年、企業用戶2核4G5M帶寬199元一年。可以在阿里云CLUB中心查看 aliyun.club 當前最新2核4G服務器精準報價、優惠券和活動信息。 阿里云官方2…

YOLO-World 簡單無需標注無需訓練直接可以使用的檢測模型

參考: https://github.com/AILab-CVC/YOLO-World YOLO-World 常規的label基本不用訓練,直接傳入圖片,然后寫入文本label提示既可 案例demo: 1)官方提供 https://huggingface.co/spaces/stevengrove/YOLO-World https://huggingface.co/spaces/SkalskiP/YOLO-World 檢測…

基于信息間隙決策理論的碳捕集電廠優化調度程序代碼!

適用平臺&#xff1a;MatlabYalmipCplex 程序在建立電廠與碳捕集裝置協同調度模型的基礎上&#xff0c;引入信息間隙決策理論(information gap decision theory, IGDT)以同時滿足系統的魯棒性和經濟性要求&#xff0c;通過風險追求和風險規避&#xff12;種決策角度得到不同的…

移動端1px問題,使用vant配合rem后需要處理成1.5px或者2,3,等等,不然ios上顯示不出來1px的邊框

table{td {border: 1.5px solid #ccc;font-family: PingFang SC, PingFang SC;font-weight: 400;font-size: 24px;color: #4E5464;line-height: 28px;text-align: center;empty-cells: show;padding: 20px 10px;height: 80px;white-space: nowrap;} }table的td樣式&#xff0c…

93. 復原 IP 地址(力扣LeetCode)

文章目錄 93. 復原 IP 地址題目描述回溯算法回溯優化&#xff08;在原s字符串上操作&#xff09; 93. 復原 IP 地址 題目描述 有效 IP 地址 正好由四個整數&#xff08;每個整數位于 0 到 255 之間組成&#xff0c;且不能含有前導 0&#xff09;&#xff0c;整數之間用 ‘.’…

真不愧是華為出來的,真的太厲害了。。。

&#x1f345; 視頻學習&#xff1a;文末有免費的配套視頻可觀看 &#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 實習去了博彥科技&#xff08;外包&#xff09;&#xff0c;做的就是螺絲釘的活&#xff0c;后面…