淺談C語言編譯原理

来源:https://www.cnblogs.com/cloudseastore/archive/2022/12/31/17016125.html
-Advertisement-
Play Games

C語言 我們在學習電腦學科時,往往最先接觸到的編程語言是C,它是所有語言中,最接近底層的高級語言之一,因而它具有執行速度快的優點。但它又具有開發周期長和對於經驗不足的開發者極容易犯錯的缺點。C語言應用範圍廣泛,你幾乎可以在任何場景中看到它的影子。 C語言編譯原理 一個編寫好的C代碼經過編譯成可執行 ...


C語言

  我們在學習電腦學科時,往往最先接觸到的編程語言是C,它是所有語言中,最接近底層的高級語言之一,因而它具有執行速度快的優點。但它又具有開發周期長和對於經驗不足的開發者極容易犯錯的缺點。C語言應用範圍廣泛,你幾乎可以在任何場景中看到它的影子。

C語言編譯原理

  一個編寫好的C代碼經過編譯成可執行程式需要經過以下4步:

    1)預處理:巨集定義展開、頭文件展開、條件編譯等,同時將代碼中的註釋刪除(這一步並不會檢車語法)

    2)編譯:檢查語法,將預處理後的文件編譯生成彙編文件

    3)彙編:將彙編文件生成目標文件(二進位文件)

    4)鏈接:C語言寫的程式是需要依賴各種庫的,所以編譯之後還需要把庫鏈接到最終的可執行程式中去。

  由上圖可知,一個C源代碼首先會經過預處理,在這期間,會將巨集定義展開、頭文件展開,條件編譯等,同時會去掉註釋,預處理結束後會生成新的.c文件。再經由編譯器,將新的.c文件編譯成彙編文件,在此期間會檢查語法。接著將彙編文件經由彙編模塊生成機器可直接識別的目標文件,即二進位文件。最後目標文件通過鏈接器將啟動代碼和系統庫鏈接在一起,生成最終的可執行程式。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Shell變數 變數是任何一種編程語言都必不可少的組成部分,變數用來存放各種數據。腳本語言在定義變數時通常不需要指明類型,直接賦值就可以,Shell 變數也遵循這個規則。 在 Bash shell 中,每一個變數的值都是字元串,無論你給變數賦值時有沒有使用引號,值都會以字元串的形式存儲。 這意味著, ...
  • 參考資料:RabbitMQ tutorial - "Hello world!" — RabbitMQ 前言 RabbitMQ是一個中間人,它接受和轉發消息。我們可以把它想象成一個郵局:當你把郵件投入郵箱的時候,你可以確信它最終會被投遞到收件人的手中。RabbitMQ就是那個郵箱、郵局和郵差。區別就在 ...
  • 一:背景 1.講故事 最近給一位朋友做 SQL 慢語句 優化,花了些時間調優,遺憾的是 SQLSERVER 非源碼公開,玩起來不是那麼順利,不過從這次經歷中我覺得明年的一個重大任務就是好好研究一下它,爭取在 SQLSERVER 性能優化上做一些成績,哈哈! 個人覺得要想深入研究 SQLSERVER, ...
  • 摘要:MRS IoTDB,它是華為FusionInsight MRS大數據套件中的時序資料庫產品,在深度參與Apache IoTDB社區開源版的基礎上推出的高性能企業級時序資料庫產品。 本文分享自華為雲社區《工業數據分析為什麼要用FusionInsight MRS IoTDB?》,作者:高深廣 。 ...
  • 簡介 CloudCanal 實現了對 Online DDL 工具如 GH-OST 和 PT-OSC 的支持,保證了對端實時同步源端的 Online DDL 操作。 本文以 MySQL -> MySQL 同步鏈路使用 GH-OST 為例,介紹 CloudCanal 是如何支持實時同步 GH-OST 產 ...
  • 統計主題 需求指標【ADS】輸出方式計算來源來源層級 訪客【DWS】pv可視化大屏page_log 直接可求dwd UV(DAU)可視化大屏需要用 page_log 過濾去重dwm UJ 跳出率可視化大屏需要通過 page_log 行為判斷dwm 進入頁面數可視化大屏需要識別開始訪問標識dwd 連續 ...
  • 前言 Angular 按照既定的發版計劃在 11 月中旬發佈了 v15 版本。推遲了一個月(幾乎每個版本都是這個節奏😳),Ng-Matero 也終於更新到了 v15。其實 Ng-Matero 本身的更新非常簡單,但是同步維護的 Material Extensions 這個庫要先於 Ng-Mater ...
  • 談起消息隊列,內心還是會有些波瀾。 消息隊列、緩存、分庫分表是高併發解決方案三劍客,而消息隊列是我最喜歡,也是思考最多的技術。我想按照下麵的四個階段分享我與消息隊列的故事,同時也是對我技術成長經歷的回顧。 ...
一周排行
    -Advertisement-
    Play Games
  • C#TMS系統代碼-基礎頁面BaseCity學習 本人純新手,剛進公司跟領導報道,我說我是java全棧,他問我會不會C#,我說大學學過,他說這個TMS系統就給你來管了。外包已經把代碼給我了,這幾天先把增刪改查的代碼背一下,說不定後面就要趕鴨子上架了 Service頁面 //using => impo ...
  • 委托與事件 委托 委托的定義 委托是C#中的一種類型,用於存儲對方法的引用。它允許將方法作為參數傳遞給其他方法,實現回調、事件處理和動態調用等功能。通俗來講,就是委托包含方法的記憶體地址,方法匹配與委托相同的簽名,因此通過使用正確的參數類型來調用方法。 委托的特性 引用方法:委托允許存儲對方法的引用, ...
  • 前言 這幾天閑來沒事看看ABP vNext的文檔和源碼,關於關於依賴註入(屬性註入)這塊兒產生了興趣。 我們都知道。Volo.ABP 依賴註入容器使用了第三方組件Autofac實現的。有三種註入方式,構造函數註入和方法註入和屬性註入。 ABP的屬性註入原則參考如下: 這時候我就開始疑惑了,因為我知道 ...
  • C#TMS系統代碼-業務頁面ShippingNotice學習 學一個業務頁面,ok,領導開完會就被裁掉了,很突然啊,他收拾東西的時候我還以為他要旅游提前請假了,還在尋思為什麼回家連自己買的幾箱飲料都要叫跑腿帶走,怕被偷嗎?還好我在他開會之前拿了兩瓶芬達 感覺感覺前面的BaseCity差不太多,這邊的 ...
  • 概述:在C#中,通過`Expression`類、`AndAlso`和`OrElse`方法可組合兩個`Expression<Func<T, bool>>`,實現多條件動態查詢。通過創建表達式樹,可輕鬆構建複雜的查詢條件。 在C#中,可以使用AndAlso和OrElse方法組合兩個Expression< ...
  • 閑來無聊在我的Biwen.QuickApi中實現一下極簡的事件匯流排,其實代碼還是蠻簡單的,對於初學者可能有些幫助 就貼出來,有什麼不足的地方也歡迎板磚交流~ 首先定義一個事件約定的空介面 public interface IEvent{} 然後定義事件訂閱者介面 public interface I ...
  • 1. 案例 成某三甲醫預約系統, 該項目在2024年初進行上線測試,在正常運行了兩天後,業務系統報錯:The connection pool has been exhausted, either raise MaxPoolSize (currently 800) or Timeout (curren ...
  • 背景 我們有些工具在 Web 版中已經有了很好的實踐,而在 WPF 中重新開發也是一種費時費力的操作,那麼直接集成則是最省事省力的方法了。 思路解釋 為什麼要使用 WPF?莫問為什麼,老 C# 開發的堅持,另外因為 Windows 上已經裝了 Webview2/edge 整體打包比 electron ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...