【C語言回顧】編譯和鏈接

  • 前言
  • 1. 編譯
  • 2. 鏈接
  • 結語

在這里插入圖片描述
在這里插入圖片描述

上期回顧: 【C語言回顧】文件操作
個人主頁:C_GUIQU
歸屬專欄:【C語言學習】

前言

各位小伙伴大家好!上期小編給大家講解了C語言中的文件操作,接下來我們講解一下編譯和鏈接!

1. 編譯

  1. 預處理(Preprocessing)
    • 宏定義處理:展開源代碼中的宏定義,例如#define PI 3.14159
    • 文件包含:處理#include指令,將頭文件的內容插入到源文件中。
    • 條件編譯:根據#ifdef#ifndef等條件編譯指令,選擇性地編譯代碼片段。
    • 刪除注釋:刪除源代碼中的注釋。
    • 預處理后,生成一個.i.ii文件。
  2. 編譯(Compilation)
    • 詞法分析:將預處理后的文本分割成一個個的記號(token)。
    • 語法分析:根據C語言的語法規則,將記號組織成語法結構,如表達式、語句、聲明等,形成抽象語法樹(AST)。
    • 語義分析:檢查語法結構的語義是否正確,如變量類型匹配、作用域規則等。
    • 代碼生成:將AST轉換成中間代碼,再進一步優化和轉換成目標代碼,通常是匯編語言。
    • 編譯后,生成匯編語言文件,通常是.s文件。

2. 鏈接

  1. 匯編(Assembly)
    • 匯編:將匯編語言文件(.s)轉換成機器語言指令,生成目標代碼(.o.obj)。
    • 目標代碼中包含機器指令,但不包含全局變量和函數的地址信息。
  2. 鏈接(Linking)
    • 合并段:將所有目標文件的.text(代碼段)、.data(已初始化數據段)、.bss(未初始化數據段)合并。
    • 符號解析:將各個目標文件中引用的符號(如函數和變量)解析為具體的地址。
    • 重定位:確定所有符號的最終地址,并修改代碼中的引用地址。
    • 消除冗余:去除未使用的函數和變量,優化最終的可執行文件。
    • 鏈接后,生成可執行文件(如Windows下的.exe,Linux下的無后綴文件)。
      在整個過程中,編譯器和鏈接器是兩個關鍵的工具。編譯器負責將源代碼轉換成機器代碼,而鏈接器負責將編譯后的代碼合并成一個可執行文件。這兩個步驟是C程序開發中不可或缺的部分,理解它們有助于更好地進行程序開發和調試。

結語

以上就是小編對編譯和鏈接的詳細講解。
如果覺得小編講的還可以,還請一鍵三連。互三必回!
持續更新中~!

在這里插入圖片描述

在這里插入圖片描述

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

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

相關文章

H5掃描二維碼相關實現

H5 Web網頁實現掃一掃識別解析二維碼,就現在方法的npm包就能實現,在這個過程中使用過html5-qrcode 和 vue3-qr-reader。 1、html5-qrcode的使用 感覺html5-qrcode有點小坑,在使用的時候識別不成功還總是進入到錯誤回調中出現類似NotFoundExc…

Python怎樣將PDF拆分成多個文件

在 Python 中,你可以使用 PyPDF2 庫來拆分 PDF 文件。以下是一個簡單的示例,演示如何將一個 PDF 文件拆分為多個單頁 PDF 文件。 首先,你需要安裝 PyPDF2 庫。如果尚未安裝,可以使用以下命令進行安裝: pip install P…

天干物燥小心火燭-智慧消防可視化大屏,隱患防治于未然。

智慧消防可視化大屏通常包括以下內容: 1.實時監控: 顯示消防設備、傳感器、監控攝像頭等設備的實時狀態和數據,包括火災報警、煙霧報警、溫度報警等。 2.建筑結構: 顯示建筑物的結構圖和平面圖,包括樓層分布、消防通…

VLC播放器(全稱VideoLAN Client)

一、簡介 VLC播放器(全稱VideoLAN Client)是一款開源的多媒體播放器,由VideoLAN項目團隊開發。它支持多種音視頻格式,并能夠在多種操作系統上運行,如Windows、Mac OS X、Linux、Android和iOS等。VLC播放器具備播放文件…

特殊變量筆記3

輸入一個錯誤命令, 在輸出$? 特殊變量:$$ 語法 $$含義 用于獲取當前Shell環境的進程ID號 演示 查看當前Shell環境進程編號 ps -aux|grep bash輸出 $$ 顯示當前shell環境進程編號 小結 常用的特殊符號變量如下 特殊變量含義$n獲取輸入參數的$0, 獲取當前She…

hugging face筆記:PEFT

1 介紹 PEFT (Parameter-Efficient Fine Tuning) 方法在微調時凍結預訓練模型參數,并在其上添加少量可訓練的參數(稱為適配器)這些適配器被訓練用來學習特定任務的信息。這種方法已被證明在內存效率和計算使用上非常高效,同時能產…

線性模型--普通最小二乘法

線性模型 一、模型介紹二、用于回歸的線性模型2.1 線性回歸(普通最小二乘法) 一、模型介紹 線性模型是在實踐中廣泛使用的一類模型,該模型利用輸入特征的線性函數進行預測。 二、用于回歸的線性模型 以下代碼可以在一維wave數據集上學習參…

基于51單片機的超聲波液位測量與控制系統

基于51單片機液位控制器 (仿真+程序+原理圖PCB+設計報告) 功能介紹 具體功能: 1.使用HC-SR04測量液位,LCD1602顯示; 2.當水位高于設定上限的時候,對應聲光報警報警&am…

手機卡該地塊

package demo; package demo; public class Phonetest { public static void main(String[] args) { Phone pnew Phone(); p.brand"小米"; p.price1998.98; System.out.println(…

在業務開發中使用ElasticSearch的指導手冊

文章目錄 該業務為什么需要ElasticSearch? / 該業務需要ElasticSearch的核心功能是哪些?正確示例錯誤示例 如何快速驗證分詞是否能夠滿足業務需求?分詞不滿足,如何自定義分詞? 業務數據的字段類型映射是否合理?實踐中…

MySQL設置表自增步長

在MySQL數據庫管理中,自增字段(AUTO_INCREMENT)是一種常見且重要的功能,通常用于生成唯一的標識符(如主鍵)。然而,在多種應用場景下,默認的自增步長(1)可能無…

【InternLM實戰營第二期筆記】02:大模型全鏈路開源體系與趣味demo

文章目錄 00 環境設置01 部署一個 chat 小模型02 Lagent 運行 InternLM2-chat-7B03 浦語靈筆2 第二節課程視頻與文檔: https://www.bilibili.com/video/BV1AH4y1H78d/ https://github.com/InternLM/Tutorial/blob/camp2/helloworld/hello_world.md 視頻和文檔內容基…

003 CentOS 7.9 mysql8.3.0安裝及配置

文章目錄 Windows PowerShell測試端口安裝及配置1. 下載MySQL安裝包2. 解壓安裝包3. 安裝MySQL4. 啟動MySQL服務5. 獲取并設置MySQL root密碼6. 創建數據庫7. 配置遠程連接(可選) 卸載mysql檢查并卸載已有的MySQL或MariaDB: https://download…

云計算和大數據處理

文章目錄 1.云計算基礎知識1.1 基本概念1.2 云計算分類 2.大數據處理基礎知識2.1 基礎知識2.3 大數據處理技術 1.云計算基礎知識 1.1 基本概念 云計算是一種提供資源的網絡,使用者可以隨時獲取“云”上的資源,按需求量使用,并且可以看成是無…

AWS安全性身份和合規性之WAF(Web Application Firewall)

AWS WAF(Web Application Firewall)是一項AWS托管的網絡安全服務,用于保護Web應用程序免受常見的Web攻擊,如SQL注入、跨站腳本(XSS)、跨站請求偽造(CSRF)等。 應用場景:…

STM32應用開發進階--IIC總線(SHT20溫濕度+HAL庫_硬件I2C)

實現目標 1、掌握IIC總線基礎知識; 2、會使用軟件模擬IIC總線和使用STM32硬件IIC總線; 3、 學會STM32CubeMX軟件關于IIC的配置; 4、掌握SHT20溫濕度傳感器的驅動; 5、具體目標:(1)用STM32硬件IIC驅動S…

49 序列化和反序列化

本章重點 理解應用層的作用,初識http協議 理解傳輸層的作用,深入理解tcp的各項特性和機制 對整個tcp/ip協議有系統的理解 對tcp/ip協議體系下的其他重要協議和技術有一定的了解 學會使用一些網絡問題的工具和方法 目錄 1.應用層 2.協議概念 3. 網絡計…

CSRF跨站請求偽造實戰

目錄 一、定義 二、與XSS的區別 三、攻擊要點 四、實戰 一、定義 CSRF (Cross-site request forgery,跨站請求偽造),攻擊者利用服務器對用戶的信任,從而欺騙受害者去服務器上執行受害者不知情的請求。在CSRF的攻擊場景中,攻擊…

Django模板層——模板引擎配置

作為Web 框架,Django 需要一種很便利的方法以動態地生成HTML。最常見的做法是使用模板。 模板包含所需HTML 輸出的靜態部分,以及一些特殊的語法,描述如何將動態內容插入。 模板引擎配置 模板引擎使用該TEMPLATES設置進行配置。這是一個配置列…