b94902xxx 板


LINE

在正式开始介绍各家 C compiler(下简称 CC) 的操作之前, 各位必须先了解一支 C 程式由文字转变到执行档之前究竟经过了怎样的过程. 不过现在各位可能对程式设计都还没什麽概念, 看不懂也是很正常的, 建议可以先试着操作看看再回来对照这篇的内容. (实际的操作会在接下来几篇介绍, 请稍安勿躁.) 完整的过程一般来说分成四个步骤, 前置处理(Preprocessing)-> 编译(Compiling)-> 组译(Assembling)-> 连结(Linking) 不过通常我们会把前面三个步骤简化一次完成, 所以在这篇以初学者为导向的文章就不会讲得那麽深入, 再说当你需要用到这麽细节的处理的时候, 你已经知道它们在做什麽了. 因此, 我们将广义的"编译"作为前面三个步骤的总称, 现在只剩下两个步骤: 编译(Compiling)->连结(Linking) 现在开始介绍这两个步骤的作用. 编译这个过程会将程式码转换成电脑能够了解的机械语言, 并且整理出这段程式码能够提供(Export)的, 以及需要从外面引入(Import)的符号(Symbol). 所谓的"符号", 就是一段 C 程式码所提供出来的物件, 通常是一段独立的程式区块(副程式, Subprocedure), 或是全域变数(Global Variable). 范例: ---- hello.c ---- #include <stdio.h> int main(){ printf ("hello world!\n"); return 0; } ---- 以一支最经典的 hello world 程式来说, hello.c 提供了一个可执行的完整程式所必要的, main 副程式. 而同时, hello.c 用到了 printf 这个符号, 但是它本身却没有提供, 因此 compiler 会在产生出来的机械语言码留下适当的空位, 以待未来有其它的程式码提供之时可以引入. 这个将多个程式码所提供的符号互相引入的过程, 就是连结. 现在交作业所写的程式都只要一支程式码就可以完成, 但是未来各位可能会需要进行大型的专案, 而必须将程式切成多个模组来分段修改维护, 就一定会需要连结这个过程. 事实上现在也已经常常在用了, 比方说上面所讲的 printf 的例子, printf 并不是 C 语言的保留字, 那究竟我们一天到晚在用的 printf 是哪来的呢? 答案是"标准 C 函式库"(Standard C Library), 它是 C 语言标准所定义, 一个支援 C 语言的系统所必须提供的程式集, 而 printf 就是别人所预先写好, 放在这里面的程式之一. 连结还有一个重要的目的, 就是要标出程式的进入点(Entry Point), 电脑看到一大堆机械语言的时候并不知道究竟哪里才是程式的开头, 因此我们要帮它标出来. C 语言规定标准的进入点是由 main 副程式进入, 在所有的原始程式片段全部安置好, 符号都已经成功引入之後, 连结器(Linker) 就会将 main 的位置记录在执行档中, 一个完整的执行档就完成了. -- 「ふ…ふざけるな!そんあ短い咒文で、魔法を起动できるわけないだろうが! お前わマウゼルの神に逆らう气なのか?!傲慢な~」 「失礼致しました、诚实に全力でお相手致します。 第一战术级‧军用攻性魔法‧出よ、武雷神〈トール〉!」 〈スクラップド‧プリンセス〉 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.109.224.64







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP