導航:首頁 > 源碼編譯 > c語言編譯器源代碼剖析

c語言編譯器源代碼剖析

發布時間:2022-08-05 16:02:55

① C語言當中源程序的定義和作用

源程序(source
code)是指未編譯的按照一定的程序設計語言規范書寫的文本文件。
源代碼(也稱源程序),是指一系列人類可讀的計算機語言指令。
在程序語言中,源代碼可以是以書籍或者磁帶的形式出現,但最為常用的格式是文本文件,這種典型格式的目的是為了編譯出計算機程序。計算機源代碼的最終目的是將人類可讀的文本翻譯成為計算機可以執行的二進制指令,這種過程叫做編譯,通過編譯器完成。C語言源代碼即用C語言編寫的一類可讀的計算機語言指令。

② c語言編程代碼

兩種方法我寫在一起,可以獨立拆開。

#include <stdio.h>

void finda1(char a[3][10]);

void finda2(char a[3][10]);

void show(char (*p)[10]);

int main()

{

char a[3][10]={{"gehajl"},{"788a987a7"},{"ccabbbabbb"}};

printf("原數組內容: ");

show(a);

printf(" 1、用數組指針的方法(函數finda1): ");

finda1(a);

printf("執行後: ");

show(a);


printf(" --------------------- ");


char b[3][10]={{"gehajl"},{"788a987a7"},{"ccabbbabbb"}};

printf("原數組內容: ");

show(a);

printf(" 2、用指針數組的方法(函數finda2): ");

finda2(b);

printf("執行後: ");

show(b);

return 0;

}

void finda1(char a[3][10])

{

int i,j;

char (*p)[10]=a;

for(i=0;i<3;i++)

for(j=0;j<10;j++)

if(p[i][j]=='a')

printf("發現:第%d行第%d個元素是『a』,已替換 ",i+1,j+1),p[i][j]='1';

}

void finda2(char a[3][10])

{

int i,j;

char *p[3]={&a[0][0],&a[1][0],&a[2][0]};

for(i=0;i<3;i++)

for(j=0;j<10;j++)

if(p[i][j]=='a')

printf("發現:第%d行第%d個元素是『a』,已替換 ",i+1,j+1),p[i][j]='1';


}

void show(char (*p)[10])

{

int i,j;

for(i=0;i<3;i++,printf(" "))

for(j=0;j<10;j++)

printf("%c ",p[i][j]);

}

③ 編譯器是怎麼被編譯出來的

我們要在Y系統上做一個C語言的編譯器,假定:X與Y是不同的兩種計算機,其指令系統不兼容。考慮以下幾種情況:
Case 1: Y上沒有C語言編譯器,但X系統上有。
那麼我們可以先在X系統上開發一個針對Y系統的C語言交叉編譯器。然後用這個交叉編譯器重新編譯已有的這個C編譯器的源代碼,就可以得到能在Y系統上運行的C語言編譯器了。(交叉編譯器:在X系統上運行的編譯器,但編譯出來的目標代碼在Y系統上運行。嵌入式平台上的程序基本都是交叉編譯得到的,因為嵌入式平台上很少會有自己的編譯器)
Case 2: X,Y上都沒有C語言編譯器,但有另一種語言的編譯器。
a.我們可以先劃出C語言的一個子集,這個子集必須滿足兩個條件:首先,必須足夠簡單,簡單到可以用另一種語言來編寫接受這個子集的編譯器;其次,必須足夠強大,強大到用這個語言子集就可以編寫出接受C語言的編譯器。(你一定奇怪為什麼一個語言的子集就能寫出接收整個語言的編譯器,呵呵。我猜是因為一個語言的很多復雜特性都是由簡單特性構成的,就像一個struct結構完全可以用幾個定義在一起的簡單變數代替實現;而且,編譯器的實現往往不會用到這個語言的高級特性,需要用的都加到那個子集里就行。)
b.再用另一種語言編寫一個能接受這個C語言子集的編譯器,只要保證可以在Y系統上正確運行就行,並不對其效率作要求,因為基本上它只被用一次。
c.然後,用C語言的子集編寫一個在Y系統上的C語言編譯器,用上一步得到的編譯器編譯得到可用的Y系統上的C編譯器。

④ C語言編譯器icc與gcc編譯出來的執行文件有什麼區別

ICC 是intel 針對intel 體系架構開發的編譯器,顯然,你的代碼,如果運行在intel機器上,intel的人開發的編譯器,編譯出來的可執行代碼效率更高。畢竟人家對intel體系結構這么熟悉,裡面的優化說明的,肯定做得不錯。但是只能運行在intel體系結構上。比如你的PPC的板子就不能運行了。

GCC是一般性的通用的編譯器,可以編譯運行在各種體系結構上的代碼,比如intel, PPC, ARM, MIPS。它很通用。裡面的開發者,當然也熟悉intel 體系架構。但是也要考慮到通用。所以,是一般化的選擇。在intel體系結構上運行的話,可能某些地方不如ICC的效率高。

他們實現的原理基本是一致的,但是在細節上,肯定差別很大。比如針對同一種語句,有的會告警,有的不會。有些支持擴展特性。有些不支持。

⑤ C語言文件的編譯與執行的四個階段並分別描述

開發C程序有四個步驟:編輯、編譯、連接和運行。

任何一個體系結構處理器上都可以使用C語言程序,只要該體系結構處理器有相應的C語言編譯器和庫,那麼C源代碼就可以編譯並連接到目標二進制文件上運行。

1、預處理:導入源程序並保存(C文件)。

2、編譯:將源程序轉換為目標文件(Obj文件)。

3、鏈接:將目標文件生成為可執行文件(EXE文件)。

4、運行:執行,獲取運行結果的EXE文件。

(5)c語言編譯器源代碼剖析擴展閱讀:

將C語言代碼分為程序的幾個階段:

1、首先,源代碼文件測試。以及相關的頭文件,比如stdio。H、由預處理器CPP預處理為.I文件。預編譯的。文件不包含任何宏定義,因為所有宏都已展開,並且包含的文件已插入。我歸檔。

2、編譯過程是對預處理文件進行詞法分析、語法分析、語義分析和優化,生成相應的匯編代碼文件。這個過程往往是整個程序的核心部分,也是最復雜的部分之一。

3、匯編程序不直接輸出可執行文件,而是輸出目標文件。匯編程序可以調用LD來生成可以運行的可執行程序。也就是說,您需要鏈接大量的文件才能獲得「a.out」,即最終的可執行文件。

4、在鏈接過程中,需要重新調整其他目標文件中定義的函數調用指令,而其他目標文件中定義的變數也存在同樣的問題。

⑥ 求C語言編譯器代碼

c語言編譯器源代碼
運行環境:9x/Me/NT/2000/XP/
源碼語言:簡體中文
源碼類型:編程源碼 - VC++源碼
下載地址:http://down2.newasp.net/code/vc/cvery_4136142.rar
或:http://www.newasp.net/code/vc/2445.html

visual c++ 功能強大,不過需要的容量也很大 ,
TC2.0也不錯 很適合初學者 不過不是很標准 下面有它們的下載網站 你自己根據自己的情況,自己選擇吧,我的建議是VC6.0

TC2.0的:
http://218.64.170.103/dload1.html?cid=

http://218.64.170.103/dload1.html?cid=

VC6.0 的:
http://218.64.170.103/dload1.html?cid=

http://218.64.170.103/dload1.html?cid=
-----------------------------------
TC 比較基礎,運行也比較快,但是是DOS界面
win-tc 是tc的windows版本,圖形化界面,很好使用。
VC 適合windows平台。集成開發環境。調試方便。
[
在http://msdn.microsoft.com/visualc/vctoolkit2003/
網站點擊( Download the Visual C++ Toolkit 2003 )
]
GCC 用於Linex,但是也有windows版本。移植性比較好
另外還有c-free,div c等,也可以在windows下使用

⑦ C語言每個代碼都是什麼意思

源程序(source code)是指未編譯的按照一定的程序設計語言規范書寫的文本文件。 源代碼(也稱源程序),是指一系列人類可讀的計算機語言指令。 在程序語言中,源代碼可以是以書籍或者磁帶的形式出現,但最為常用的格式是文本文件,這種典型格式的目的是為了編譯出計算機程序。計算機源代碼的最終目的是將人類可讀的文本翻譯成為計算機可以執行的二進制指令,這種過程叫做編譯,通過編譯器完成。C語言源代碼即用C語言編寫的一類可讀的計算機語言指令。

⑧ 用c語言編譯器怎麼修改軟體源碼

首先你要有軟體的源代碼,然後更改你想要改的地方,然後編譯,
然後就得到修改後的程序了。
如果你沒有源代碼,只可能更改程序里的資源,比如字元串圖片什麼的,其他的就不好更改了。

⑨ C語言中頭文件和源文件寫法有什麼區別

相同點:
頭文件與源代碼都是源文件,都用純文本文件存儲,都需要遵照C/C++語言規范來寫,都可以使用類型定義和常、變數定義,都可以包含函數的聲明和實現,都能包含宏定義,都使用相同的調用規范。

不同點:
C/C++的編譯器規定源代碼文件必須包含函數入口,即main函數,或者winmain函數。而頭文件不得包含函數入口,也就是說,頭文件不可以單獨編譯成一個程序,僅僅包含程序片斷或者僅僅定義常、變數。

關聯:
頭文件是專為源代碼調用而寫的靜態包含文件,可被源代碼文件中的#include編譯預處理指令解釋,而將頭文件完整拷貝到源代碼的指令處,從而在編譯時相當於在源代碼中插入了函數聲明或者實現。

某些頭文件包含了靜態庫中的函數調用聲明,包含了LIB文件的調用信息,編譯時靜態鏈接進程序;而某些頭文件是專為方便API調用而寫的,裡麵包含了動態鏈接庫的調用信息和規范,只有在運行時將DLL載入內存提取函數執行。

也就是說,其實你將頭文件里的信息完全寫到源代碼里,是可以實現完全相同的功能的。如果你想要學寫頭文件,可以參照標准C/C++庫的h文件。

⑩ 求用一個較為簡易C語言編譯器(要源代碼),謝謝啦

你這個挺高深…我沒接觸過,我說下我的經驗,不知道能不能幫上你。你說的這些,文本資料網路文庫差不多會有。只要你能寫出課程設計的名字就差不多。搜索的時候語言要盡可能規范,有代表性。
如果網路文庫沒有就去中國知網等一些文獻檢索網站去搜索。裡面全是學位論文,學術論文。很多很豐富。
再有就去網路搜索下相關的網址。要不斷變化你的搜索內容,盡量用語規范專業。
以上是我檢索資料的經驗,希望能夠幫到你!!

閱讀全文

與c語言編譯器源代碼剖析相關的資料

熱點內容
老死pdf 瀏覽:25
雲伺服器關機網址不見了 瀏覽:69
余冠英pdf 瀏覽:755
開發一個app上市需要什麼步驟 瀏覽:28
phpsleep方法 瀏覽:430
時間同步伺服器ip地址6 瀏覽:926
鋼琴譜pdf下載 瀏覽:524
香港阿里雲伺服器怎麼封udp 瀏覽:875
APp買海鮮到哪裡 瀏覽:501
遼油社保app總提示更新怎麼辦 瀏覽:586
導入源碼教程視頻 瀏覽:613
天翼貸app在哪裡下載 瀏覽:186
app開發源碼查看器 瀏覽:516
程序員發展到了一個瓶頸 瀏覽:120
程序員去機房幹嘛 瀏覽:697
英雄訓練師怎麼看曾經伺服器 瀏覽:546
魔獸世界單機輸入gm命令 瀏覽:372
51單片機最大負跳距是多少 瀏覽:418
android聊天控制項 瀏覽:128
導致壓縮機壞的原因 瀏覽:295