日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

高级语言的编译过程和解释过程_进来了解一下C语言真正的编译过程看你掌握了吗?...

發布時間:2025/3/12 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高级语言的编译过程和解释过程_进来了解一下C语言真正的编译过程看你掌握了吗?... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C語言

前言

說實話,很多人做了很久的C/C++,也用了很多IDE,但是對于可執行程序的底層生成一片茫然,這無疑是一種悲哀,可以想象到大公司面試正好被問到這樣的問題,有多悲催不言而喻,這里正由于換工作的緣故,所以打算系統的把之前用到的C/C++補一補。

總述

從一個源文件(.c)到可執行程序到底經歷了哪幾步,我想大多數的人都知道,到時到底每一步都做了什么,我估計也沒多少人能夠說得清清楚楚,明明白白。

其實總的流程是這樣的。

C語言

(1)編輯hello.c

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

(2)預處理

預處理過程實質上是處理“#”,將#include包含的頭文件直接拷貝到hell.c當中;將#define定義的宏進行替換,同時將代碼中沒用的注釋部分刪除等

具體做的事兒如下:

(1)將所有的#define刪除,并且展開所有的宏定義。說白了就是字符替換

(2)處理所有的條件編譯指令,#ifdef #ifndef #endif等,就是帶#的那些

(3)處理#include,將#include指向的文件插入到該行處

(4)刪除所有注釋

(5)添加行號和文件標示,這樣的在調試和編譯出錯的時候才知道是是哪個文件的哪一行

(6)保留#pragma編譯器指令,因為編譯器需要使用它們。

加C/C++學習交.流群獲取C語言、C++、Windows高級編程,MFC框架編程、QT框架編程,Linux應用程序開發,Linux內核研究等系統學習路線,更有進階干貨的直播免費學習權限 ,都是大牛帶飛 讓你少走很多的彎路的 群...號是 787190917

gcc -E hello.c -o a.c可以生成預處理后的文件。通過查看文件內容和文件大小可以得知a.c講stdio.h和stdlib.h包含了進來。

C語言

(3)編譯

編譯的過程實質上是把高級語言翻譯成機器語言的過程,即對a.c做了這些事兒

(1)詞法分析,

(2)語法分析

(3)語義分析

(4)優化后生成相應的匯編代碼

從 高級語言->匯編語言

gcc -S hello.c -o a.s可以生成匯編代碼

C語言

匯編代碼如下。

.file "hello.c" .section .rodata.LC0: .string "hello world!" .text .globl main .type main, @functionmain:.LFB0: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 andl $-16, %esp subl $16, %esp movl $.LC0, (%esp) call puts movl $0, %eax leave .cfi_restore 5 .cfi_def_cfa 4, 4 ret .cfi_endproc.LFE0: .size main, .-main .ident "GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3" .section .note.GNU-stack,

總結

以上是生活随笔為你收集整理的高级语言的编译过程和解释过程_进来了解一下C语言真正的编译过程看你掌握了吗?...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。