我們編寫的C代碼是怎樣跑起來的?

C語言文章更新目錄

C/C++學習資源(百度雲盤鏈接)
計算機二級資料(過級專用)
C語言學習路線(從入門到實戰)
編寫C語言程序的7個步驟和編程機制
C語言基礎-第一個C程序
C語言基礎-簡單程序分析
VS2019編寫簡單的C程序示例
簡單示例,VS2019調試C語言程序
C語言基礎-基本算法
C語言基礎-數據類型
C語言中的輸入輸出函數
C語言流程控制語句
C語言數組——一維數組
C語言數組——二維數組
C語言數組——字符數組
C語言中常用的6個字符串處理函數
精心收集了60個C語言項目源碼,分享給大家
C語言核心技術——函數

要想弄明白這個問題,首先我們得了解下C語言的編程機制,關於編程機制我在前面的文章中提到過,但沒有過多的描述,今天我們就一起來看看這個問題。

我們先寫一個hello.c文件

#include<stdio.h>

int main() {
	printf("hello world!");
	return 0;
}

這個文件其實是一個特殊的文本文件,就存在我們的磁盤上,被稱爲源代碼文件
在這裏插入圖片描述

源代碼文件是不能直接運行的,而我們平時運行的文件是可執行文件。

那麼,源代碼文件經過怎樣的變化才能變爲可執行文件呢?先思考一分鐘。。。

C語言是通過編譯和鏈接兩個步驟完成這一過程。編譯器把源代碼轉換成中間代碼hello.obj,鏈接器把中間代碼和其它代碼合併,生成可執行文件。這裏所說的中間代碼就是目標文件,它裏面存放的是機器語言代碼。
在這裏插入圖片描述

說到這裏,有人就會問目標文件裏存放的是機器語言代碼,爲什麼不能直接運行目標文件呢?

其實目標文件裏存放的只是編譯器翻譯的源代碼,還不是一個完整的程序。

目標文件缺少啓動代碼和庫代碼,啓動代碼因系統不同會有所差異。幾乎所有的C程序都要C標準庫中的函數,例如hello.c中的printf()函數,這個函數真正的代碼存儲在一個被稱爲庫的文件中。

鏈接器的作用就是將目標文件、啓動代碼和庫代碼合併成一個可執行文件hello.exe

運行可執行文件,我們會看到下面的結果。
在這裏插入圖片描述

爲了更好的理解,這裏畫了一個流程圖供大家參考。
在這裏插入圖片描述

好了,今天就介紹到這,後面繼續更新

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章