2

1.1define  指定用一个符号名称代表一个常量  http://hi.baidu.com/corebo/item/13d89e559c0e74d5d58bac12

该命令有两种格式:一种是简单的宏定义,另一种是带参数的宏定义。
(1) 简单的宏定义:
#define <宏名>   <字符串>
例: #define PI 3.1415926
(2) 带参数的宏定义
#define <宏名> ( <参数表>) <宏体>
例: #define A(x) x

1.2 main http://blog.csdn.net/thefutureisour/article/details/7629395

http://blog.sina.com.cn/s/blog_66a61dbe0100ygwz.html

在看C++书中     国内的书中都是void main()  而且无返回

而昨天买了本c++ primer plus中的无论大小例子都是int main()   而且最后都有返回return 0;

标准的main函数写法只有两种:
int main()
int main(int argc, char argc[])
其它写法都是不提倡的。

 4.1 溢出

程序溢出基本有两种解释
一是内存溢出 比如程序出现死循环等状况
二是数据长度不够 比如long型定义成int型

在内存中,当一个程序运行时,系统会为它分配一定的资源。例如C中的INT就是分配2字节的内存单元,
能存放65535种数字,即-32768~32767范围的数,假如大于这个范围了呢?就会向上进位,但是程序只会读取2字节的数,
超出的部分是不管的,就造成了重头再读数的现象。
而CPU处理数据是这样的:当处理某种程序A时,
如果有另外一个程序B要执行,并且符合规范,CPU就会暂停执行当前程序,转去执行下一个程序,内存中 的情况就是这样的:

[A程序 ]
[的执行 ]
[资源 ]〈-- A被分配资源,开始执行
[ ]
[B的执行 ]〈-- B暂时存储
[资源 ]

(内存的分配从下到上)


这时,假如缺乏必要的保护措施,并且A输入了大于分配给它的资源,那么这时,
A的执行代码就会向下占用资源,并且覆盖B的部分。

如果我们写下精心设计的代码,让覆盖到B的那部分执行别有用心的语句,
那么当计算机处理完A那部分资源,转回来继续执行B时,就会被欺骗执行那些别用用心的代码。

 

posted @ 2013-06-26 20:14  WelcomeToMe  阅读(185)  评论(0编辑  收藏  举报