菜鸟C++精髓学习笔记--C++程序内部执行过程(预处理、编译、链接过程的作用)

2014.11.1开始了《C++精髓》的学习,半个月艰难的看完了前两章,还是学到了或者说在心里明确了一些东西的,现整理如下:

1.      预处理程序指令

在将源代码转换为可执行程序的过程中,编译程序并不是第一个工具。处理源代码的第一个工具是预处理程序。预处理程序的目标是减少程序员在开发程序时编写的源代码的数量。

 

预处理程序处理源文件,并将处理结果传送给编译程序进行编译。预处理程序会忽略大多数的程序语句,并不做修改地将它们传送给编译程序。预处理程序只关注预处理程序指令。

 

注释对于编译程序来说不可见,这是由于预处理程序在源代码文本被编译前,已经将注释删除。

 

预处理程序指令以“#”开头并占用一整行。不能在一个源文件行上写多于一条的指令。如果一行写不完一条指令。可以继续写在下一行,但前一行的末尾必须以一个特殊的转义字符号“\”结束。

预处理程序指令不是c++/c的一个部分,预处理程序也不是编译程序的一个部分。

2.      编译程序

如果源文件没有语法错误,编译程序就会生成一个与源文件同名的目标文件。目标文件的扩展名可以是.o或者.obj,由系统规定。

3.      连接程序

成功编译后的下一个步骤就是连接。当程序由若干个源文件组成时,在开发阶段每个文件都可以独立地进行编译。如果源代码中含有其他文件中定义的标识符声明(变量或者函数),编译程序就会不知道这些标识符的地址,因为编译程序一次只编译一个文件。《如果连接时识别不了,就会出现链接错误》当所有源文件编译成功时,就可以将它们连接起来。连接程序就会检查所有的目标文件,并解决在其他文件中定义的标识符的外部引用。

链接程序将更多c++库中一些已经预编译的代码加入到目标代码中,这些代码不需要通过编译,而直接链接就可以。

 

链接的结果是可执行程序。如果是一个多文件程序,可执行程序的名字就与该工程的名字相同(可以改),如果是一个单文件程序,可执行程序的名字就与源文件的名字相同。

链接错误通常是误写了函数的名字,或者是对工程的不正确的操纵。

 

可执行程序可以运行,。可以在调试模式下或者在产品模式下运行。

 

4.      变量的初始化和赋初值

(1)Double x=PI,y=1,z;//对变量x,y进行初始化

(2)Double x,y,z;

X=PI;y=1;//赋初值

5.      变量的定义和声明

定义:定义使变量的名字对应了指定的类型,并为变量分配了相应的存储空间,而声明只是使变量的名字与类型之间建立了对应关系,因为变量的存储空间在其他的地方分配。

定义必须是唯一的,声明可以重复多次。

Int a; int a;(x)  extern int count; extern int count;(v)

 

声明多发生在一个由多个文件组成的程序中,在一个文件中定义了一个变量,而在另一个文件中使用了该变量。在使用这个变量的文件中,使用关键字extern将变量定义为外部变量:extern int count;我们可以在这个文件的源代码中使用变量count,在这个文件中所有对变量count的引用都会转换为在另一个文件中定义的变量count的地址。

6.      一个设计正确的while循环必须由以下的几部分组成:

(1)      在循环之前对循环变量的当前值进行初始化。

(2)      在循环体中使用循环变量的当前值

(3)      在循环体中修改循环变量的当前值(通常是在循环体的最后)。

7. 只有定义了类的对象以后,才会根据类的成员变量的类型分配相应的内存

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值