⑴ 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語言語句執行順序(初學者)
先執行do { } while()這個語句中括弧部分,執行完後判斷while語句是否成立,成立則繼續執行中括弧中語句,如此循環。中括弧中部分,while((c=str[i])==『』)i++;是先執行c=str[i]這個賦值語句,然後判斷c的值是否等於' ',等於的話就執行i++,然後繼續執行c=str[i],如此循環。while((c=str[i])!=''&&c!='\0')i++;是先執行賦值語句c=str[i],然後判斷c是否等於' ',等於的話再判斷c是否等於'\0',兩個條件都成立的話就執行i++,如此循環。
⑶ C語言,函數執行先後順序
其實是printf("等於");
先執行的,然後再執行的scanf("%d",&c);
只不過scanf的時候並不是從屏幕上scanf的,而是從緩沖區scanf的
你的5其實在printf之前先進入了緩沖區,然後再printf等於,然後再從緩沖區scanf那個5
如果要想得到你那個效果的輸入輸出,可以試試下面的代碼
#include<stdio.h>
voidmain()
{
intb,c,f;
chara;
scanf("%d%c",&b,&a);
printf("%d%c",b,a);
if(a=='-')
{
printf("等於");
scanf("%d",&c);
f=b-c;
printf("%d%d",c,f);
}
}
⑷ 關於C語言程序的執行順序
1.
最開始a=0.000000;
2.
C語言從main()函數開始執行,如果在main()函數中不調用test(),那麼test()就不執行。
3.
假設調用了test()函數,那麼要等timer函數執行完之後才開始執行a
=
k
+
i
。
4.
假設調用了timer()函數,只是要循環100次,並不是100個時鍾周期。
⑸ 一個c語言的執行是從什麼開始的
c程序的執行總是從本程序的main函數開始執行的。
一個C語言的執行是從本程序的main函數開始,到main函數結束,但需要注意的是,也是有特殊情況的,若是代碼中出現了exit函數,則直接結束程序。
c程序介紹
c程序C語言是世界上最流行、使用最廣泛的面向過程的高級程序設計語言。 C語言對則帶操作系統和系統使用程序以及需要對硬體進行操作的場合,用C語言明顯優於其它高級語言,許多大型應用軟體都是用C語言編寫的。
C語言具有繪圖能力強,可移植性,並具備很孫遲蘆強的數據處理能力,因此適於編寫系統軟體,三維,二維圖形和動畫是它數值計算的高級語言。
不僅如此,C語言也是在計算機中比較實用的程序設計工具,掌握了c語言之後,對用戶在日後學習JAVA、C++、VB等都是有好處的,可以打下良好的基礎,主要是因為這些語言大部分都是由C語言擴充或衍生而來的。
C語言是一門面向過程、抽象化的通用程序設計語言,廣泛應用於底層開發。C語言能以簡易的方式編譯、處理低級存儲器。C語言是僅產生少量的機器語言以及不旦兄需要任何運行環境支持便能運行的高效率程序設計語言。
⑹ C語言程序的運行順序
for多重循環的執行順序是先執行內部循環,再執行外部循環
通過對代碼進行等價轉換,按照上述原理即可知道代碼的執行順序
對於上面代碼:
for(i=0;i<8;i++)
for(j=0;j<10;j++)
scanf("%d,%d",&i,&j);
它等價於下面
for(i=0;i<8;i++){
for(j=0;j<10;j++){
scanf("%d,%d",&i,&j);
}
}
從上面可以看出,每執行完一次j循環,i的值才增加1
但是注意,該代碼有一個陷阱:scanf函數會改變i和j的值
實際執行順序會受用戶輸入的i、j值的不同而不同
對於下面的代碼
for(i=0;i<8;)
min_m(i++)=i
for(j=0;j<8;j++)
它等價於下面的代碼:
for(i=0;i<8;){
min_m(i++)=i
}
for(j=0;j<8;j++){}
會先執行min_m函數8次 然後再執行j循環
注意,該代碼有一個問題,就是min_m函數的返回值必須是一個左值。
這意味著某些變數的值發生了更改,可能會影響到循環。