① c語言文件的編譯與執行的四個階段並分別描述
開發C程序有四個步驟:編輯、編譯、連接和運行。
任何一個體系結構處理器上都可以使用C語言程序,只要該體系結構處理器有相應的C語言編譯器和庫,那麼C源代碼就可以編譯並連接到目標二進制文件上運行。
1、預處理:導入源程序並保存(C文件)。
2、編譯:將源程序轉換為目標文件(Obj文件)。
3、鏈接:將目標文件生成為可執行文件(EXE文件)。
4、運行:執行,獲取運行結果的EXE文件。
(1)編譯c語言程序的三個過程擴展閱讀:
將C語言代碼分為程序的幾個階段:
1、首先,源代碼文件測試。以及相關的頭文件,比如stdio。H、由預處理器CPP預處理為.I文件。預編譯的。文件不包含任何宏定義,因為所有宏都已展開,並且包含的文件已插入。我歸檔。
2、編譯過程是對預處理文件進行詞法分析、語法分析、語義分析和優化,生成相應的匯編代碼文件。這個過程往往是整個程序的核心部分,也是最復雜的部分之一。
3、匯編程序不直接輸出可執行文件,而是輸出目標文件。匯編程序可以調用LD來生成可以運行的可執行程序。也就是說,您需要鏈接大量的文件才能獲得「a.out」,即最終的可執行文件。
4、在鏈接過程中,需要重新調整其他目標文件中定義的函數調用指令,而其他目標文件中定義的變數也存在同樣的問題。
② C語言源程序的編譯過程包括哪三個階段
編譯:將源程序轉換為擴展名為.obj的二進制代碼
連接:將obj文件進行連接,加入庫函數等生成可執行文件
運行:執行可執行文件,有錯返回修改,無錯結束
③ C語言編譯執行的全過程是怎樣的
預處理階斷:這個就是那些#include啥的。
編譯階斷:把C語言的代碼轉成匯編語言代碼,比如 int a = 2; 它會生成mov a, 2;
匯編階斷:把匯編代碼轉換成機器碼,比如把mov a , 2 ; 轉成 cd07 (mov指令的機器碼中的一種機器碼)
鏈接階斷:製作成一個可執行文件,比如windows是PE的可執行文件,linux是elf的可執行文件,要製作成可以運行的程序。
④ C語言源程序到運行程序經過哪幾個步驟
1、預處理
在這一階段,源碼中的所有預處理語句得到處理,例如:#include語句所包含的文件內容替換掉語句本身,所有已定義的宏被展開。
根據#ifdef,#if等語句的條件是否成立取捨相應的部分,預處理之後源碼中不再包含任何預處理語句。
GCC預處理階段可以生成.i的文件,通過選項-E可以使編譯器在預處理結束時就停止編譯。例如:gcc -E -o hello.i hello.c
2、編譯
這一階段,編譯器對源碼進行詞法分析、語法分析、優化等操作,最後生成匯編代碼。這是整個過程中最重要的一步,因此也常把整個過程稱為編譯。
可以通過選項-S使GCC在進行完編譯後停止,生成.s的匯編程序。例如:gcc -S -o hello.s hello.c
3、匯編
這一階段使用匯編器對匯編代碼進行處理,生成機器語言代碼,保存在後綴為.o的目標文件中。
當程序由多個代碼文件構成時,每個文件都要先完成匯編工作,生成.o目標文件後,才能進入下一步的鏈接工作。
目標文件已經是最終程序的某一部分了,只是在鏈接之前還不能執行。可以通過-c選項生成目標文件:gcc -c -o hello.o hello.c
4、鏈接
經過匯編以後的機器代碼還不能直接運行。為了使操作系統能夠正確載入可執行文件,文件中必須包含固定格式的信息頭,還必須與系統提供的啟動代碼鏈接起來才能正常運行,這些工作都是由鏈接器來完成的。gcc -o hello hello.c
5、運行:執行.EXE文件,得到運行結果。
⑤ C語言程序運行過程
第一題答案:
60.5
70.5
運行過程:首先struct xscj xs[]={{1,60,61},{2,70,71}};這條語句是對結構體數組xs賦初值,{1,60,61}分別賦值給xs[0].n=1, xs[0].cj1=60, xs[0].cj2=61;xs[0].cj3未賦值。同理,{2,70,71}分別賦值:xs[1].n=2, xs[1].cj1=70, xs[1].cj2=71;xs[1].cj3未賦值.
其次,
for(i=0;i<2;i++){
xs[i].cj3=(xs[i].cj1+xs[i].cj2)/2;
printf("%5.1f ",xs[i].cj3);
}
這條語句是分別對xs[1],xs[2]的cj3欄位賦值,賦值為(cj1+cj2)/2的值。輸出語句 printf("%5.1f ",xs[i].cj3);限定了輸出寬度和小數點位數,故輸出60.5 和 70.5.
2.第二題填空:st.name @st.age
首先明白scanf的格式:
scanf("格式化字元串",變數地址表);
「變數地址表」是接受輸入數據的變數的地址。第一個輸入格式是%s,接收字元串,字元串名字即為首地址,所以直接st.name就可以了;第二個格式是%d,接收整型數據,所以必須取地址,使用取地址符號&,所以第二空答案就是&st.age.
⑥ C語言程序的執行過程有哪幾個步驟
先是寫源碼一般是點c的或者點SQC在或者是點EC的文件
然後就是編譯
編譯之前首先把不是點c的文件生成點c的文件
然後就是編譯
先是預編譯把一些inclde里邊的文件宏定義之類的東西展開(相當與把所有的文件搞成一個)
然後就是編譯把c文件生成一個點o的二進制文件
如果有需要的話把點o的文件生成一個點a的庫文件
再就是連接把所有的點o和點a文件生成可執行程序
接下來就是執行這個可執行文件了
⑦ C語言程序主要的實現過程是什麼
主要是學c語言的基本詞法,基本語句分類,基本構成,開發環境,基本數據類型,運算符,表達式,結構化程序3種基本結構,數組,
指針,函數,文件
如果要編程還要學數據結構
⑧ c語言程序編譯過程包括哪四個
C語言編譯過程分成四個步驟:
1,由.c文件到.i文件,這個過程叫預處理
2,由.i文件到.s文件,這個過程叫編譯
3,由.s文件到.o文件,這個過程叫匯編
4,由.o文件到可執行文件,這個過程叫鏈接
用gcc查看預處理過程(假設源文件叫hello.c)
gcc -o hello.i hello.c -E
然後用 vi hello.i 即可查看生成的預處理文件
按ESC 輸入:$ 跳到預處理文件 可看到hello.c源碼
宏的本質:預處理階段的單純的字元串替換
預處理階段,不考慮C語法
⑨ C語言程序開發的四個步驟是什麼
1 寫代碼。
2 編譯。
3 鏈接。
4 運行。
⑩ 求大一5段簡單的C語言程序(語言程序編譯過程)
//寫的比較亂,將就著看吧
#include<stdio.h>
#include<string.h>
intfunction1(char*str,charfind);
intfunction2(inta,intb,intc);
intfunction3(floata,floatb,floatc);
intfunction4();
intfunction5();
intmain()
{
inta=3,b=10,c=5;
printf("function1 ");
char*string="helloworld";
printf("have%d%c ",function1(string,'l'),'l');
printf("function2 ");
printf("themaxis:%d ",function2(a,b,c));
printf("function3 ");
floato=10.4,p=5.7,q=6.3;
function3(o,p,q);
function4();
function5();
return0;
}
intfunction1(char*str,charfind)
{
inti=0,j=0;
for(i=0;i<strlen(str);i++)
{
if(str[i]==find)
{
j++;
}
}
returnj;
}
intfunction2(inta,intb,intc)
{
return(a)>(b)?((a)>(c)?(a):(b)):((b)>(c)?(b):(c));
}
intfunction3(floata,floatb,floatc)
{
floatt;
if(a>b)
{
t=a;
a=b;
b=t;
}
if(a>c)
{
t=a;
a=c;
c=t;
}
if(b>c)
{
t=b;
b=c;
c=t;
}
printf("a: b: c: ");
printf("%f %f %f ",a,b,c);
}
intfunction4()
{
intm;
char*arr[8]={"1","mon","tue","wed","thu","fri","sat","sun"};
printf("function4 ");
printf("pleaseinputanumber ");
scanf("%d",&m);
if(m<0||m>7)
{
printf("inputerror ");
return-1;
}
else
{
printf("thisnumberis%s ",arr[m+1]);
return0;
}
}
intfunction5()
{
floata,b;
printf("addfunction ");
printf("pleaseinputtwonumber ");
scanf("%f%f",&a,&b);
printf("%.3f+%.3f=%.3f",a,b,a+b);
}