const定义常量与宏定义的区别!!!

宏定义语法格式:# define 宏名称 宏值 //不加分号,变量名一般设为大写

宏的替换与计算 举一个例子:

                                         #define N 3+1

                                         #define Y(n) ((N+1)*n)

                                         若执行语句  Z = 2 *(N+Y(5+1))后 Z 的值为多少?

                                         Z = 2*(3+1+(3+1+1)*5+1)= 60

宏的替换在代码运行的预编译阶段,预编译阶段完成的主要任务是宏的替换和注释的替换(注释替换为空格,宏出现的地方全都替换为该宏定义时赋予的数值)

宏定义的好处:①使代码简洁明了 ②方便代码维护 如果有需求改变数值时 只需改变宏定义的地方 而不用改代码内部

 

const定义常量的格式:const 数据类型 常量名 = 常量数值 (若未指定数据类型,默认为int类型)

                 const int a = 100;//若数据类型为int 也可以写为 const  a = 100;

const 的作用就是指明 a 为常量而不是变量。此时如果想篡改a的值,编译器就会报错,比如:

    a = 90;//此时编译器会报错 const 所定义的变量其值不可以再被修改,而且必须一开始就指定该值,也就是说用const定义敞亮                 //的同时必须初始化。

综上,两者的区别可以总结为:

① 两者在代码生成时所被处理的阶段不同,宏的替换在预编译(预处理)阶段,而const 常量则在编译阶段才确定,并分配内存

②const常量有数据类型,而宏没有数据类型。编译器只对宏在预编译阶段进行替换,却没有类型及安全检查,所以在替换过程中可能会出现错误,但是编译器却可以对const所定义的常量进行类型和安全检查,由宏引起的错误一般调试不出来,而const常量可以

 

 

你可能感兴趣的:(const定义常量与宏定义的区别!!!)