導航:首頁 > 源碼編譯 > c編譯成目標文件

c編譯成目標文件

發布時間:2022-07-08 08:22:30

㈠ c語言生成的目標文件和匯編語言生成的文件有什麼區別

匯編語言和二進制代碼是有直接對應關系的,也就是說匯編語言在編譯時是直接翻譯就可以了,不存在優化的問題,所以匯編語言的編譯器都相當小。
而c語言在編譯時首先進行的是詞法分析和語法分析,然後是優化,還會加入版本信息和一些防止溢出的判斷,所以編譯後的文件相比匯編直接寫成的程序要大很多。然後c語言編譯後的程序運行時其實是需要C
run-timelibrary的支持的

㈡ C語言中的源程序文件和目標文件的擴展名分別是

C語言源代碼文件一般擴展名為.c,目標文件擴展名一般為.obj,生成的可執行文件擴展名一般為.exe。

不同平台的C源代碼擴展名都為.c,但目標文件擴展名不同,例如:在Linux平台上,生成的可執行文件一般擴展為.out。

源文件:這是指由源程序和數據構成的文件。通常由終端或輸入設備輸入的源程序和數據所形成的文件都屬於源文件。它通常是由 ASCII 碼或漢字所組成的。

目標文件:這是指把源程序經過相應語言的編譯程序編譯過,但尚未經過鏈接程序鏈接的目標代碼所構成的文件。它屬於二進制文件。

可執行文件:這是指把編譯後所產生的目標代碼再經過鏈接程序鏈接後所形成的文件。

(2)c編譯成目標文件擴展閱讀:

源文件,目標文件,可執行文件的聯系:

源文件就是用匯編語言或高級語言寫出來的代碼保存為文件,目標文件是指源文件經過編譯程序產生的能被cpu直接識別二進制文件。將目標文件鏈接起來就成了可執行文件。

源代碼與源文件:

源代碼(也稱源程序)是指未編譯的按照一定的程序設計語言規范書寫的文本文件,是一系列人類可讀的計算機語言指令。 在現代程序語言中,源代碼可以是以書籍或者磁帶的形式出現,但最為常用的格式是文本文件,這種典型格式的目的是為了編譯出計算機程序。

計算機源代碼的最終目的是將人類可讀的文本翻譯成為計算機可以執行的二進制指令,這種過程叫做編譯,通過編譯器完成。在大多數情況下,源代碼等於源文件。

參考資料來源:網路-源文件



㈢ 請問要用c語言編程,怎麼創建目標文件啊

源代碼文件可以用任意文本編輯.
目標文件由編譯器生成.具體的生成方法在不同的開發環境上是不同的.
gcc的例子:

gcc -o target_file test.c

編譯test.c生成可執行文件target_file

gcc -c test.c

編譯test.c ,生成目標文件test.o,但不進行link.

㈣ 求將C語言源文件轉換成目標文件的源代碼,萬分感謝!

#include<stdio.h>
#include<stdlib.h>
#include <string.h>
typedef struct pnode //個人記錄結點類型
{
char name[8]; //姓名
char tel[16]; //電話號碼
char addr[30]; //住址
}personnode;

char filename[20]; //存儲通訊錄名稱數組
FILE *fp;

void creat() //初始輸入記錄
{
personnode *person;
person=(personnode*)malloc(sizeof(personnode));
printf("\n請輸入通訊錄名:");
scanf("%s",filename);
printf("---------------------------------------------\n");
if((fp=fopen(filename,"w"))==NULL) //打開文件
{
printf("\n沒有輸入通訊錄名,不能建立通訊錄!");
exit(1);
}
fprintf(fp,"%-10s%-20s%-50s\n","姓名","電話號碼","住址");
printf("\n請輸入姓名,電話號碼及住址(以空格隔開,以@結束)\n");
printf("---------------------------------------------\n");
scanf("%s",person->name);

while(strcmp(person->name,"@"))
{
scanf("%s%s",person->tel,person->addr);
fprintf(fp,"%-10s%-20s%-50s\n",person->name,person->tel,person->addr);
scanf("%s",person->name);

}
fclose(fp);
}

void output() //輸出通訊錄
{
personnode*person;
person=(personnode*)malloc(sizeof(personnode));
if((fp=fopen(filename,"r"))==NULL)
{
printf("\n不能打開通訊錄!");
exit(1);
}
printf("\n*********************************************\n");
printf("%24s\n","通訊錄");
while(!feof(fp))
{
fscanf(fp,"%s%s%s\n",person->name,person->tel,person->addr);
printf("%-10s%-20s%-50s\n",person->name,person->tel,person->addr);

}
fclose(fp);
printf("*********************************************\n\n");
}

void append() //增加記錄
{
personnode *person;
person=(personnode*)malloc(sizeof(personnode));
if((fp=fopen(filename,"a"))==NULL)
{
printf("\n不能打開通訊錄!");
exit(1);
}
printf("\n請輸入要添加的姓名,電話號碼及住址\n");
scanf("%s%s%s",person->name,person->tel,person->addr);
fprintf(fp,"%-10s%-20s%-50s\n",person->name,person->tel,person->addr);
fclose(fp);
}

void search() //查找記錄
{
int k=0;
char namekey[8];
personnode *person;
person=(personnode*)malloc(sizeof(personnode));
printf("\n請輸入需要查找的姓名:");
scanf("%s",namekey);
if((fp=fopen(filename,"rb"))==NULL)
{
printf("\n不能打開通訊錄!");
exit(1);
}
while(!feof(fp))
{
fscanf(fp,"%s%s%s\n",person->name,person->tel,person->addr);
if(!strcmp(namekey,person->name))
{
printf("\n\n已查到,記錄為:");
printf("%-10s%-20s%-50s\n",person->name,person->tel,person->addr);
k=1;
}
}
if(!k) printf("\n\n對不起,通訊錄中沒有此人的記錄。\n");
fclose(fp);
}

void dele() //刪除記錄
{
int k=0;
char m;
long offset1;
char namekey[8];
personnode *person;
person=(personnode*)malloc(sizeof(personnode));
printf("\n請輸入要刪除記錄的姓名:");
scanf("%s",namekey);
if((fp=fopen(filename,"r+"))==NULL)
{
printf("\n不能打開通訊錄!");
exit(1);
}
while(!feof(fp))
{
offset1=ftell(fp); //P302(C語言),ftell(fp)的值是fp所指文件中位置指針的當前指向
fscanf(fp,"%s%s%s\n",person->name,person->tel,person->addr);
if(!strcmp(namekey,person->name))
{
k=1;
break;
}
}
if(k)
{
printf("\n已查到,記錄為:");
printf("%-10s%-20s%-50s\n",person->name,person->tel,person->addr);
printf("\n確實要刪除?y/n\n");
scanf("%s",&m);
if(m='y')
{
fseek(fp,offset1,SEEK_SET); //P302,fseek()函數的作用是使位置指針移動到所需的位置,(SEEK_SET即0,頭文件)
fprintf(fp,"%-14s%-24s%-48s\n"," "," "," ");
printf("已經刪除!\n");
}

}
else
{
printf("\n對不起,通訊錄中沒有此人的記錄。\n");
}
fclose(fp);
}
main()
{
int m,flag=1;
creat();
while(flag)
{
printf("---------------------------------------------\n");
printf("\t\t1---添加\n");
printf("\t\t2---查找\n");
printf("\t\t3---刪除\n");
printf("\t\t4---輸出\n");
printf("\t\t5---退出\n");
printf("---------------------------------------------\n");
printf("\t請選擇(1-6)\n");
scanf("%d",&m);
switch(m)
{
case 1: append();break;
case 2: search();break;
case 3: dele();break;
case 4: output();break;
case 5: exit(0);
}
}
return 0;
}

這是我以前做的一個實驗,裡面就是把數據輸出到目標文件的,沒有什麼一段代碼直接丟到裡面去就直接能做好的,認真看下吧,尤其注意person=(personnode*)malloc(sizeof(personnode));
if((fp=fopen(filename,"a"))==NULL);這些語句

㈤ 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、在鏈接過程中,需要重新調整其他目標文件中定義的函數調用指令,而其他目標文件中定義的變數也存在同樣的問題。

㈥ 我用的TCPP C編譯怎樣把C文件變成.exe目標文件使用

如果你想從EXE(binary
code,
二進制代碼)獲取其source
code(源代碼),幾乎是不可能的,除非用反匯編。但是反匯編也不見得就能得到精確的源代碼。如果你是想修改一個EXE文件的Resource的話,比如說icon(圖標),description(描述)等,倒是有一些工具。你可以到這個地方去下載:
http://www.thefreecountry.com/programming/resourceeditors.shtml

㈦ c語言編譯流程(c語言是如何變成可執行文件的)

1.預編譯,把源代碼中的宏展開並把包含的文件的源代碼插入程序的源代碼中.
2.編譯,把源代碼編譯成二進制的目標文件.但是此時目標文件還是不可執行的.
3.匯編,這一步主要是處理源代碼中的匯編代碼
4.連接,把目標代碼和二進制的庫文件以及其它內容合並成最終的可執行文件.

㈧ 如何把多個c源文件生成目標文件

1、如果,在一個c主程序中,以include形式包含了其他所有的引用文件,在編譯過程中,編譯器首先會將這些文件合並到一個臨時文件中,然後再對這個臨時文件進行編譯。
2、如果,是作為一個工程,編譯器會分別編譯各個獨立的文件(如果文件中有include按照上一步進行),然後再將編譯好的初步結果用鏈接程序連到一起。
簡單的說,每一個.c或者.cc都是一個編譯單元,每一個編譯單元編輯的結果是一個.o或者obj之類的中間文件,至於是否是多文件,不需要關心,但是要保證不同的編譯單元之間不要有重復的符號,這就是要避免重復包含。
每一個編譯單元生成的目標文件.o或者obj都會引用一些不在本目標文件中的符號,這些符號定義在別的.o或者.obj文件中, 鏈接器把他們聯系在一起,所有的符號也就都有定義了,編譯鏈接簡單說來就是這樣。

㈨ C語言源程序文件經過編譯連接之後生成一個後綴為_____的文件。

如果只生成一個文件,那麼這個題目答案是B。編譯(compile)後生成目標文件,後綴:.obj。也就是機器碼。

然後鏈接器(Linker) 連接生成可執行文件,後綴:.exe。最後運行命令(go),直接運行.exe文件。

(9)c編譯成目標文件擴展閱讀:

簡單講,編譯器就是將「一種語言(通常為高級語言)」翻譯為「另一種語言(通常為低級語言)」的程序。

一個現代編譯器的主要工作流程:源代碼(source code) →預處理器(preprocessor) →編譯器(compiler) →目標代碼(object code) →鏈接器(Linker) → 可執行程序(executables)

高級計算機語言便於人編寫,閱讀交流,維護。機器語言是計算機能直接解讀、運行的。

編譯器將匯編或高級計算機語言源程序(Source program)作為輸入,翻譯成目標語言(Target language)機器代碼的等價程序。

源代碼一般為高級語言 (High-level language), 如Pascal、C、C++、Java、漢語編程等或匯編語言。

而目標則是機器語言的目標代碼(Object code),有時也稱作機器代碼(Machine code)。

對於C#、VB等高級語言而言,此時編譯器完成的功能是把源碼(SourceCode)編譯成通用中間語言(MSIL/CIL)的位元組碼(ByteCode)。

最後運行的時候通過通用語言運行庫的轉換,編程最終可以被CPU直接計算的機器碼(NativeCode)。

㈩ C語言執行過程生成的三種文件和擴展名

  1. 用C語言編寫的程序成為C語言源程序,源程序文件的擴展名為「.c」。

  2. 源程序經編譯生成目標文件(".obj")。

  3. 把目標文件與各種庫函數連接起來,生成可執行文件(「.exe」).

C語言程序可以使用在任意架構的處理器上,只要那種架構的處理器具有對應的C語言編譯器和庫,然後將C源代碼編譯、連接成目標二進制文件之後即可運行。

(10)c編譯成目標文件擴展閱讀:

C語言是面向過程的編程語言,用戶只需要關注所被解決問題的本身,而不需要花費過多的精力去了解相關硬體,且針對不同的硬體環境,在用C語言實現相同功能時的代碼基本一致,不需或僅需進行少量改動便可完成移植。

這就意味著,對於一台計算機編寫的C程序可以在另一台計算機上輕松地運行,從而極大的減少了程序移植的工作強度。

C語言既有高級語言的特點,又具有匯編語言的特點;既是一個成功的系統設計語言,又是一個實用的程序設計語言;既能用來編寫不依賴計算機硬體的應用程序,又能用來編寫各種系統程序;是一種受歡迎、應用廣泛的程序設計語言。

閱讀全文

與c編譯成目標文件相關的資料

熱點內容
噴油螺桿製冷壓縮機 瀏覽:579
python員工信息登記表 瀏覽:377
高中美術pdf 瀏覽:161
java實現排列 瀏覽:513
javavector的用法 瀏覽:982
osi實現加密的三層 瀏覽:233
大眾寶來原廠中控如何安裝app 瀏覽:916
linux內核根文件系統 瀏覽:243
3d的命令面板不見了 瀏覽:526
武漢理工大學伺服器ip地址 瀏覽:149
亞馬遜雲伺服器登錄 瀏覽:525
安卓手機如何進行文件處理 瀏覽:71
mysql執行系統命令 瀏覽:930
php支持curlhttps 瀏覽:143
新預演算法責任 瀏覽:444
伺服器如何處理5萬人同時在線 瀏覽:251
哈夫曼編碼數據壓縮 瀏覽:426
鎖定伺服器是什麼意思 瀏覽:385
場景檢測演算法 瀏覽:617
解壓手機軟體觸屏 瀏覽:350