C语言源程序到运行程序经过哪几个步骤 C语言源程序到运行程序经过哪几个步骤?

\u5f00\u53d1\u4e00\u4e2ac\u8bed\u8a00\u7a0b\u5e8f\u8981\u7ecf\u8fc7\u54ea\u56db\u4e2a\u6b65\u9aa4

\u5f00\u53d1\u4e00\u4e2aC\u8bed\u8a00\u7a0b\u5e8f\u9700\u8981\u7ecf\u8fc7\u7684\u56db\u4e2a\u6b65\u9aa4\uff1a\u7f16\u8f91\u3001\u7f16\u8bd1\u3001\u8fde\u63a5\u3001\u8fd0\u884c\u3002
C\u8bed\u8a00\u7a0b\u5e8f\u53ef\u4ee5\u4f7f\u7528\u5728\u4efb\u610f\u67b6\u6784\u7684\u5904\u7406\u5668\u4e0a\uff0c\u53ea\u8981\u90a3\u79cd\u67b6\u6784\u7684\u5904\u7406\u5668\u5177\u6709\u5bf9\u5e94\u7684C\u8bed\u8a00\u7f16\u8bd1\u5668\u548c\u5e93\uff0c\u7136\u540e\u5c06C\u6e90\u4ee3\u7801\u7f16\u8bd1\u3001\u8fde\u63a5\u6210\u76ee\u6807\u4e8c\u8fdb\u5236\u6587\u4ef6\u4e4b\u540e\u5373\u53ef\u8fd0\u884c\u3002
1\u3001\u9884\u5904\u7406\uff1a\u8f93\u5165\u6e90\u7a0b\u5e8f\u5e76\u4fdd\u5b58(.C\u6587\u4ef6)\u3002
2\u3001\u7f16\u8bd1\uff1a\u5c06\u6e90\u7a0b\u5e8f\u7ffb\u8bd1\u4e3a\u76ee\u6807\u6587\u4ef6(.OBJ\u6587\u4ef6)\u3002
3\u3001\u94fe\u63a5\uff1a\u5c06\u76ee\u6807\u6587\u4ef6\u751f\u6210\u53ef\u6267\u884c\u6587\u4ef6( .EXE\u6587\u4ef6)\u3002
4\u3001\u8fd0\u884c\uff1a\u6267\u884c.EXE\u6587\u4ef6,\u5f97\u5230\u8fd0\u884c\u7ed3\u679c\u3002

\u6269\u5c55\u8d44\u6599\uff1a

C\u8bed\u8a00\u4ee3\u7801\u53d8\u4e3a\u7a0b\u5e8f\u7684\u51e0\u4e2a\u9636\u6bb5\uff1a
1\u3001\u9996\u5148\u662f\u6e90\u4ee3\u7801\u6587\u4ef6test.c\u548c\u76f8\u5173\u7684\u5934\u6587\u4ef6\uff0c\u5982stdio.h\u7b49\u88ab\u9884\u5904\u7406\u5668cpp\u9884\u5904\u7406\u6210\u4e00\u4e2a.i\u6587\u4ef6\u3002\u7ecf\u8fc7\u9884\u7f16\u8bd1\u540e\u7684.i\u6587\u4ef6\u4e0d\u5305\u542b\u4efb\u4f55\u5b8f\u5b9a\u4e49\uff0c\u56e0\u4e3a\u6240\u6709\u7684\u5b8f\u5df2\u7ecf\u88ab\u5c55\u5f00\uff0c\u5e76\u4e14\u5305\u542b\u7684\u6587\u4ef6\u4e5f\u5df2\u7ecf\u88ab\u63d2\u5165\u5230.i\u6587\u4ef6\u4e2d\u3002
2\u3001\u7f16\u8bd1\u8fc7\u7a0b\u5c31\u662f\u628a\u9884\u5904\u7406\u5b8c\u7684\u6587\u4ef6\u8fdb\u884c\u4e00\u7cfb\u5217\u7684\u8bcd\u6cd5\u5206\u6790\u3001\u8bed\u6cd5\u5206\u6790\u3001\u8bed\u4e49\u5206\u6790\u4ee5\u53ca\u4f18\u5316\u540e\u4ea7\u751f\u76f8\u5e94\u7684\u6c47\u7f16\u4ee3\u7801\u6587\u4ef6\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u5f80\u5f80\u662f\u6211\u4eec\u6240\u8bf4\u7684\u6574\u4e2a\u7a0b\u5e8f\u7684\u6784\u5efa\u7684\u6838\u5fc3\u90e8\u5206\uff0c\u4e5f\u662f\u6700\u590d\u6742\u7684\u90e8\u5206\u4e4b\u4e00\u3002
3\u3001\u6c47\u7f16\u5668\u4e0d\u76f4\u63a5\u8f93\u51fa\u53ef\u6267\u884c\u6587\u4ef6\u800c\u662f\u8f93\u51fa\u4e00\u4e2a\u76ee\u6807\u6587\u4ef6\uff0c\u6c47\u7f16\u5668\u53ef\u4ee5\u8c03\u7528ld\u4ea7\u751f\u4e00\u4e2a\u80fd\u591f\u8fd0\u884c\u7684\u53ef\u6267\u884c\u7a0b\u5e8f\u3002\u5373\u9700\u8981\u5c06\u4e00\u5927\u5806\u6587\u4ef6\u94fe\u63a5\u8d77\u6765\u624d\u53ef\u4ee5\u5f97\u5230\u201ca.out\u201d\uff0c\u5373\u6700\u7ec8\u7684\u53ef\u6267\u884c\u6587\u4ef6\u3002
4\u3001\u5728\u94fe\u63a5\u8fc7\u7a0b\u4e2d\uff0c\u5bf9\u5176\u4ed6\u5b9a\u4e49\u5728\u76ee\u6807\u6587\u4ef6\u4e2d\u7684\u51fd\u6570\u8c03\u7528\u7684\u6307\u4ee4\u9700\u8981\u88ab\u91cd\u65b0\u8c03\u6574\uff0c\u5bf9\u5b9e\u7528\u5176\u4ed6\u5b9a\u4e49\u5728\u5176\u4ed6\u76ee\u6807\u6587\u4ef6\u7684\u53d8\u91cf\u6765\u8bf4\uff0c\u4e5f\u5b58\u5728\u540c\u6837\u95ee\u9898\u3002
\u53c2\u8003\u8d44\u6599\u6765\u6e90\uff1a\u767e\u5ea6\u767e\u79d1-c\u8bed\u8a00

C\u6e90\u7a0b\u5e8f\u5230\u8fd0\u884c\u7a0b\u5e8f\u6b65\u9aa4\uff1a
1.\u7f16\u8f91\uff1a\u8f93\u5165\u6e90\u7a0b\u5e8f\u5e76\u5b58\u76d8(.C)
2.\u7f16\u8bd1\uff1a\u5c06\u6e90\u7a0b\u5e8f\u7ffb\u8bd1\u4e3a\u76ee\u6807\u6587\u4ef6(.OBJ)
3.\u94fe\u63a5\uff1a\u5c06\u76ee\u6807\u6587\u4ef6\u751f\u6210\u53ef\u6267\u884c\u6587\u4ef6( .EXE)
4.\u8fd0\u884c\uff1a\u6267\u884c.EXE\u6587\u4ef6,\u5f97\u5230\u8fd0\u884c\u7ed3\u679c

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文件,得到运行结果。



预处理阶段:预处理器(cpp)根据以字符#开头的命令,修改原始的C程序。比如hello.c中第一行的#include<stdio.h>命令告诉预处理器读取系统头文件stdio.h的内容,并把它直接插入程序文本中,结果就得到了另一个C程序,通常是以.i作为文件扩展名。
编译阶段:编译器(ccl)将文本文件hello.i翻译成文本文件hello.s,它包含一个汇编语言程序。汇编语言程序中的每条语句都以一种标准的文本格式确切的描述了一条低级机器语言指令。
汇编阶段:汇编器(as)将hello.s翻译成机器语言指令,把这些指令打包成一种可重定位目标程序的格式,并将结果保存在目标文件hello.o中。hello.o文件是一个二进制文件,它的字节编码是机器语言指令而不是字符,如果我们在文本文件中打开hello.o文件,看到的将是一堆乱码。
链接阶段:链接器(ld)负责处理合并目标代码,生成一个可执行目标文件,可以被加载到内存中,由系统执行

C源程序到运行程序步骤:
1.编辑:输入源程序并存盘(.C)
2.编译:将源程序翻译为目标文件(.OBJ)
3.链接:将目标文件生成可执行文件( .EXE)
4.运行:执行.EXE文件,得到运行结果

四个步骤
预处理 编译 汇编 链接
详情:http://www.cnblogs.com/pipicfan/archive/2012/07/10/2583910.html

C语言经过编译成汇编程序 ,编译得到的汇编语言通过汇编器(assembler)再汇编成可重定位目标程序

  • 缂栧啓涓涓c璇█绋嬪簭鐩村埌杩愯,缁忚繃鍑涓楠?姣忎竴姝ョ敓鎴愮殑鏂囦欢绫诲瀷鏄粈涔堢被...
    绛旓細棣栧厛寤虹珛婧愪唬鐮(鐢熸垚.c鎴栬.cpp鏂囦欢)锛岀劧鍚庣紪璇戯紙鐢熸垚.o鏂囦欢锛夛紝鏈鍚庨摼鎺ワ紙鐢熸垚鍙墽琛屾枃浠讹紝windows涓嬫槸.exe鏂囦欢銆傦級涓句釜渚嬪瓙锛歭izi.cpp(缂栧啓浠g爜鏂囦欢)lizi.o锛堢紪璇戝悗鐢熸垚鏂囦欢锛塴izi.exe(閾炬帴鍚庣敓鎴愬彲鎵ц鏂囦欢)鐜板湪澶у鏁颁汉閮界敤鍙鍖栫殑缂栧啓杞欢锛屼粠婧愮▼搴忓埌鍙墽琛屾枃浠剁殑涓棿杩囩▼鑲畾鐪嬩笉鍒扮殑 ...
  • C璇█鐨勭紪璇戣繃绋嬪寘鎷嚑涓樁娈?
    绛旓細锛 1 锛夎瘝娉曞垎鏋愶細涔熷氨鏄粠宸﹀埌鍙充竴涓竴涓殑璇诲叆婧愮▼搴锛岃瘑鍒竴涓崟璇嶆垨绗﹀彿锛屽苟杩涜褰掔被銆傦紙 2 锛夎娉曞垎鏋愶細 鍦ㄨ瘝娉曞垎鏋愮殑鍩虹涓婏紝灏嗗崟璇嶅簭鍒楀垎瑙f垚鍚勭被璇硶鐭锛屽鈥滅▼搴忊濓紝鈥滆鍙モ濓紝鈥滆〃杈惧紡鈥濈瓑銆傦紙 3 锛夎涔夊垎鏋愶細瀹℃煡婧愮▼搴忔槸鍚︽湁璇箟鐨勯敊璇紝褰撲笉绗﹀悎璇█瑙勮寖鐨勬椂鍊欙紝绋嬪簭灏变細鎶ラ敊銆傦紙 ...
  • c璇█缂栧啓涓涓绋嬪簭鍒嗗嚑姝?
    绛旓細缂栧啓涓涓C璇█绋嬪簭閫氬父鍖呮嫭浠ヤ笅姝ラ锛氬畾涔夊彉閲忥細鏍规嵁绋嬪簭鐨勯渶瑕侊紝瀹氫箟鍙橀噺鐢ㄤ簬瀛樺偍鏁版嵁銆傚彉閲忓彲浠ユ槸鏁村瀷銆佸瓧绗﹀瀷銆佹诞鐐瑰瀷绛夈傜紪鍐欎唬鐮侊細缂栧啓绋嬪簭鐨勪富浣撲唬鐮侊紝鍖呮嫭绠楁硶鍜岄昏緫鎿嶄綔绛夈傜紪璇戠▼搴忥細浣跨敤C璇█缂栬瘧鍣ㄥ皢婧愪唬鐮缂栬瘧鎴愬彲鎵ц鏂囦欢銆杩愯绋嬪簭锛氳繍琛岀紪璇戝悗鐨勫彲鎵ц鏂囦欢锛岃瀵熺▼搴忕殑杈撳嚭缁撴灉銆備互涓嬫槸涓涓畝鍗...
  • C璇█婧愮▼搴鐨勭紪璇戣繃绋嬪寘鎷摢涓変釜闃舵
    绛旓細璇嶆硶鍒嗘瀽闃舵锛氳鍏婧愮▼搴锛屽鏋勬垚婧愮▼搴忕殑瀛楃娴佽繘琛屾壂鎻忓拰鍒嗚В锛岃瘑鍒嚭鍗曡瘝锛岃娉曞垎鏋愰樁娈碉細鏈哄櫒閫氳繃璇嶆硶鍒嗘瀽锛屽皢鍗曡瘝搴忓垪鍒嗚В鎴愪笉鍚岀殑璇硶鐭锛岀‘瀹氭暣涓緭鍏ヤ覆鑳藉鏋勬垚璇硶涓婃纭殑绋嬪簭銆傝涔夊垎鏋愰樁娈碉細妫鏌ユ簮绋嬪簭涓婃湁娌℃湁璇箟閿欒锛屽湪浠g爜鐢熸垚闃舵鏀堕泦绫诲瀷淇℃伅 涓棿浠g爜鐢熸垚闃舵锛氬湪杩涜浜嗕笂杩扮殑璇硶鍒嗘瀽鍜...
  • 涓涓C璇█绋嬪簭鏂囦欢杩愯鍖呭惈浜嗕互涓嬪摢浜涙楠
    绛旓細銆愮瓟妗堛戯細D 缂栬緫锛氬涓涓绋嬪簭鐨勭紪鍐欙紱缂栬緫锛氬皢婧愭枃浠惰瘧涓虹洰鏍囦簩杩涘埗鏈哄櫒璇█鐨浠g爜锛屽苟瀵圭▼搴忎腑鐨勯敊璇繘琛屾鏌ワ紱杩炴帴锛氬涓枃浠惰繛鎺ユ垨涓庡簱鍑芥暟鏂囦欢杩炴帴锛屽苟鐢熸垚鍙墽琛岀▼搴忥紱杩愯锛氭墽琛屽苟鏌ョ湅缁撴灉銆
  • [C璇█] 杩愯C绋嬪簭鐨勬楠?
    绛旓細鏈夋椂缂栬瘧杩囩▼鏈彂鐜伴敊璇紝鑳界敓鎴愬彲鎵ц绋嬪簭锛屼絾鏄繍琛岀殑缁撴灉涓嶆纭備竴鑸儏鍐典笅锛岃繖涓嶆槸璇硶鏂归潰鐨勯敊璇紝鑰屽彲鑳芥槸绋嬪簭閫昏緫鏂归潰鐨勯敊璇紝渚嬪璁$畻鍏紡涓嶆纭佽祴鍊间笉姝g‘绛夛紝搴斿綋杩斿洖妫鏌婧愮▼搴锛屽苟鏀规閿欒銆備负浜嗙紪璇戙佽繛鎺ュ拰杩愯C绋嬪簭锛屽繀椤昏鏈夌浉搴旂殑缂栬瘧绯荤粺銆傜洰鍓嶄娇鐢ㄧ殑寰堝C缂栬瘧绯荤粺閮芥槸闆嗘垚寮鍙戠幆澧(IDE...
  • C璇█鐨婧愮▼搴蹇呴』閫氳繃浠涔堝拰浠涔堟墠鑳借璁$畻鏈烘墽琛?
    绛旓細缂栬瘧鍜岄摼鎺ャ傛瘡涓涓C璇█绋嬪簭蹇呴』瑕缁忚繃缂栬瘧鍜岄摼鎺ユ墠鑳借璁$畻鏈烘墽琛岋紝缂栬瘧鏄皢C婧愮爜缈昏瘧鎴愭満鍣ㄧ爜锛岄摼鎺ユ槸灏嗗皢浜岃繘鍒剁洰鏍囨枃浠惰閰嶆垚涓涓叿鏈夌壒瀹氭牸寮忕殑浜岃繘鍒跺彲鎵ц鏂囦欢锛屾瘮濡俉indows骞冲彴涓婃槸PE鏍煎紡锛屼竴鑸互.exe涓烘墿灞曞悕銆備竴涓狢璇█绋嬪簭浠庢簮鐮佸埌璁$畻鏈虹郴缁熷彲浠ユ墽琛岋紝鏇寸粏鑷寸殑鍒掑垎涓猴細棰勫鐞嗏斺旂紪璇戔斺旀眹缂...
  • C璇█绋嬪簭杩愯杩囩▼
    绛旓細棰勭紪璇戠▼搴忓皢鎶婂ご鏂囦欢涓殑瀹氫箟缁熺粺閮藉姞鍏ュ埌瀹冩墍浜х敓鐨勮緭鍑烘枃浠朵腑锛屼互渚涚紪璇戠▼搴忓涔嬭繘琛屽鐞嗐傚寘鍚埌c婧愮▼搴涓殑澶存枃浠跺彲浠ユ槸绯荤粺鎻愪緵鐨勶紝杩欎簺澶存枃浠朵竴鑸鏀惧湪/usr/include鐩綍涓嬨傚湪绋嬪簭涓#include瀹冧滑瑕佷娇鐢ㄥ皷鎷彿锛>锛夈傚彟澶栧紑鍙戜汉鍛樹篃鍙互瀹氫箟鑷繁鐨勫ご鏂囦欢锛岃繖浜涙枃浠朵竴鑸笌c婧愮▼搴忔斁鍦ㄥ悓涓鐩綍涓嬶紝...
  • 楂樼骇璇█鐨勭紪璇戣繃绋,缁忚繃鍝嚑涓楠?
    绛旓細浠讳綍涓涓綋绯荤粨鏋勫鐞嗗櫒涓婇兘鍙互浣跨敤C璇█绋嬪簭锛屽彧瑕佽浣撶郴缁撴瀯澶勭悊鍣ㄦ湁鐩稿簲鐨凜璇█缂栬瘧鍣ㄥ拰搴擄紝閭d箞C婧愪唬鐮灏卞彲浠ョ紪璇戝苟杩炴帴鍒扮洰鏍囦簩杩涘埗鏂囦欢涓杩愯銆1銆侀澶勭悊锛氬鍏婧愮▼搴骞朵繚瀛橈紙C鏂囦欢锛夈2銆佺紪璇戯細灏嗘簮绋嬪簭杞崲涓虹洰鏍囨枃浠讹紙Obj鏂囦欢锛夈3銆侀摼鎺ワ細灏嗙洰鏍囨枃浠剁敓鎴愪负鍙墽琛屾枃浠讹紙EXE鏂囦欢锛夈4銆佽繍琛岋細...
  • 鐢C璇█缂栧啓绋嬪簭蹇呴』缁忚繃鍝簺姝ラ
    绛旓細瀵 D)C璇█鏈夊緢澶氱寮鍙戠幆澧冿紝濡傦細BC銆丟CC銆乂C绛夈傚叾涓殑Visual C++鎻愪緵涓涓泦缂栬緫銆佺紪璇戙侀摼鎺ャ佽皟璇曘杩愯涓轰竴浣撶殑闆嗘垚寮鍙戠幆澧冿紙IDE锛夈傚 E)C璇█婧愮▼搴涓彲浠ユ湁棰勫鐞嗗懡浠(濡傦細#include绛)锛岄澶勭悊鍛戒护閫氬父搴旀斁鍦ㄦ簮鏂囦欢鎴栨簮绋嬪簭鐨勬渶鍓嶉潰銆傚 F)C璇█绋嬪簭鐨勬墽琛屽拰鍑芥暟鎺掑垪鐨勯『搴忔湁鍏筹紝鏀惧湪鍓嶉潰...
  • 扩展阅读:代码写好了怎么运行 ... 怎么让c语言运行 ... c++必背入门代码 ... 已经有一个程序实例在运行 ... 一个完整的c源程序 ... 运行c程序的方法 ... 程序已运行但是没窗口 ... c语言打完了怎么运行 ... 已经有一个安装程序在运行 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网