C/C++每日一课 >> 程序是怎样生成的(2005-04-22)

原创 2005年05月14日 16:59:00
/* C/C++每日一课*/
/*2005-05-14*/
/*来自 虚拟现实论坛 (http://www.3d-vr.com)*/
/*作者: srj2005*/

对于初学编程语言的朋友们来说, 可能对于自己写的一行行代码是怎么样变成一个可以执行的程序的感到费解,
看到编译器上面乱七八糟的一堆堆的选项更是望而生畏.
所以预先了解一点程序生成的过程, 对于提高自己的兴趣是很有帮助的.

和人们生活中说出来或者写出来的语言一样, 计算机语言也是一些符号用一定的
规则排列成的一个序列. 对于C语言来说, 符号很简单, 他只包括26个英文字母,数字
和少数其他几个字符, 相信念过高中的朋友都会认识. 而重要的就是这些符号排列的规则了,
也就是我们说的C语言的语法. 这里就不详细说了, 相信你既然来到这里就多多少少已经了解一些了.
好了, 现在说具体一点的, 一般你在上面写C语言代码的那个软件我们称之为C语言的
开发环境, 它除了提供一个方便的界面让你编辑文本以外, 还有两个比较重要的功能:
1. 编译功能.  也就是负责把你写的代码翻译成CPU的执行指令, 这是一个很重要的功能, 我们称它为编译器
2. 连接功能:  负责把这些指令按照一定的格式组织起来, 最终行成一个可以在指定平台(操作系统)下面运行的程序. 我们称为连接器

当我们写好一个程序文件, 也就是写好了一个按照C语言语法规则排列的一个字符序列了. 别看你在写的时候把它排列的整整齐齐,非常美观,其实
其实对于计算机来说是一点都不会欣赏的, 他只是把他当作一个字符序列.

一般写好了程序代码以后, 第一件要做的事情就是编译. 编译的时候编译器逐个读入你写的子符序列, 然后从序列中分离出他认识的词,
在根据这些词预先定义的意思(功能), 翻译成CPU指令. 这个过程是发现程序错误最多的一个过程. 因为很有可能他读的时候读到一个词,
结果发现不认识, 或者预期的下一个单词
没有出现. 这些都导致便宜无法进行下去. 这时候编译器就会把错误反馈给你, 告诉你的程序写的不对.
如果这一步成功了的话, 你写的程序这时候就变成一堆的CPU指令序列了. 也就完成了翻译的工作. 其实这个过程是一个相当复杂的过程, 就不细说了

接下来你的程序是不是就可以执行了呢? 还不可以的. 编译的时候编译器是一个源代码文件(C,CPP文件)为单位进行的.
而你可能为了使你的程序逻辑更鲜明而把代码分别放到几个文件里面去了. 这时候就会产生很多个包含着CPU指令的文件.
还有, 你的程序肯定是要在某一个操作系统上面运行的, 而不同的操作系统也有它自己的一套执行指令
组织的规则. 所以现在程序还是跑不起来的. 而这个任务就要交给连接器来完成了. 连接器负责把多个CPU指令文件
(对于C/C++编译器, 这些指令一般保存在后缀名是.OBJ的文件里面)拼节起来, 然后根据你设置的操作系统平台,
最终生成一个可以执行的文件. 比如在Window下面就是你们熟悉的.exe文件. 到此为止, 开发环境就完成了他所有的史命,让你得到了你想要的东西. 真是累坏它了

因为一般用户其实都不太关心编译和连接这两个步骤, 而只想得到最终可用的程序, 所以现在的开发环境里面一般除了编译和连接的菜单以外,
还有一个 建立(Build)菜单,也就是把这两个步骤连起来做了, 而这也是一般用户用的最多的一个选择.

每日一题---day4

基础题: 1、判断两个链表是否相交,若相交,求交点(假设链表不带环) 思路: 代码: ListNode* Intersect(ListNode* l1,ListNode* l2) {...
  • qq_38117478
  • qq_38117478
  • 2018年01月23日 11:59
  • 12

深入浅出CChart 每日一课——快乐高四第十课 见微知著,CChart内置功能介绍之数据处理篇

CChart内置数据处理功能默认是不打开的。要打开数据处理功能,请点击菜单“绘图状态-->特别功能-->允许数据处理”,这时菜单“曲线数据à数据名”下,将多出一个“数据处理”菜单,如图所示。 可...
  • baita96
  • baita96
  • 2015年08月26日 15:09
  • 1333

C/C++程序编译步骤以及如何生成可执行文件

一、开篇         许久不碰关于这方面的知识了,前几天同学开课提及到该部分,正好作为回顾吧。         C/C++语言很多人都比较熟悉,这基本上是每位大学生必学的一门编程语言,通常还都是作...
  • qq_21842557
  • qq_21842557
  • 2016年07月12日 10:32
  • 7641

C++每日一课(三)

一、C++语句 /* 作者:xiesheng 时间:2017-06-22 版本:v1.0 说明:C++语句说明 */ #include int main() { using names...
  • advent86
  • advent86
  • 2017年06月23日 01:08
  • 114

C++每日一课(十七)

for循环 使用循环的主要目的是为了让程序去执行一些重复的任务。 /* 作者:xiesheng 时间:2017-07-09 版本:v1.0 说明:for循环 */ #include ...
  • advent86
  • advent86
  • 2017年07月12日 23:43
  • 98

C++每日一课(十)

字符串 字符串就是存在内存中的一连串连续的字符 处理字符串的方式 1.C风格的字符串处理方式 2.基于String类库的处理方法 C风格的字符串处理 以空字符(\0)结尾,来标识字...
  • advent86
  • advent86
  • 2017年06月28日 01:00
  • 90

C++每日一课(四)

一、函数 使用函数的模块,是用于创建C++程序模块 简单先介绍下函数 函数,分为两种:有返回值、无返回值的 有返回值的函数在执行后会生成一个值,这个值可以用来赋给变量或在其它的表达式中使用。 ...
  • advent86
  • advent86
  • 2017年06月24日 13:19
  • 96

C++每日一课(七)

浮点数 浮点数,表示可以带小数部分的数字,它们可以表示的数值很大,如果用long无法表示时可以用浮点数来表示 比如3.1415926这样的数字使用浮点数进行存储 在计算机中这样的值分成两部分进行...
  • advent86
  • advent86
  • 2017年06月25日 12:09
  • 97

C++每日一课(十九)

while循环 while循环是没有初始化和更新部分的for循环,它只有测试条件和循环体 while(test-condition)     body 第一步,程序会计算圆括号内的测试...
  • advent86
  • advent86
  • 2017年07月24日 00:06
  • 119

C++每日一课(十四)

指针 计算机程序在存储数据时必须要知道的3个属性 1.存在何处 2.存的值是多少 3.存的信息是什么类型 为了达到上面的目的,可以定义一个简单的变量,指出符号名、值、类型 ...
  • advent86
  • advent86
  • 2017年07月08日 16:44
  • 107
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C/C++每日一课 >> 程序是怎样生成的(2005-04-22)
举报原因:
原因补充:

(最多只允许输入30个字)