1.#define 宏常量实在预编译阶段进行简单的替换,枚举常量是在编译器确定其值;
2.一般在编译器里面,可以调试枚举常量,但是不可以调试常量;
3.枚举可以一次性定义大量的相关的常量,而宏一次只定义一个;
4.枚举常量具有类型,但是宏没有类型,枚举常量具有与普通变量相同的诸如作用域、值等性质,但宏没有。
5.宏定义不是说明或语句,在行末不必加分号。
6.宏定义其作用域为宏定义命令起到源程序结束。如要结束其作用可使用#under命令。
7.枚举的优点;自动赋值,调试器在检验其枚举变量时,可以显示其符号值,带有类型归属和类型的检测。宏指事件的替换,不会做检查。
8.const是修饰,它可以指定任意类型的数据为常量,比如:const float PI =3.1416;enum是类型定义,可以用这个类型来定义变量,而且变量的取值范围理论上应该只在enum指定的常量值中去取。enum定义常量,常量本身只能是整型值。
一、 #define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。
该命令有两种格式:一种是简单的宏定义,另一种是带参数的宏定义。
(1) 简单的宏定义:
#define <宏名> <字符串>
例: #define PI 3.1415926
(2) 带参数的宏定义
#define <宏名> ( <参数表>) <宏体>
例: #define A(x) x
一个标识符被宏定义后,该标识符便是一个宏名。这时,在程序中出现的是宏名,在该程序被编译前,先将宏名用被定义的字符串替换,这称为宏替换,替换后才进行编译,宏替换是简单的替换。
二、 枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解为任何基本类型。
1. 枚举的定义
枚举类型定义的一般形式为:
enum 枚举名{ 枚举值表 };
在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。
例如:
该枚举名为weekday,枚举值共有7个,即一周中的七天。凡被说明为weekday类型变量的取值只能是七天中的某一天。
2. 枚举变量的说明
如同结构和联合一样,枚举变量也可用不同的方式说明,即先定义后说明,同时定义说明或直接说明
设有变量a,b,c被说明为上述的weekday,可采用下述任一种方式:
enum weekday{ sun,mou,tue,wed,thu,fri,sat };
enum weekday a,b,c;
或者为: enum weekday{ sun,mou,tue,wed,thu,fri,sat }a,b,c;
或者为: enum { sun,mou,tue,wed,thu,fri,sat }a,b,c;
枚举类型在使用中有以下规定:
1. 枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值。 例如对枚举weekday的元素再作以下赋值: sun=5; mon=2; sun=mon; 都是错误的。
2. 枚举元素本身由系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2…。如在weekday中,sun值为0,mon值为1,…,sat值为6。
三、 const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。
const关键字**
修饰全局变量:C/C++略有不同,在上文已经提到,即C++的const修
饰的全局变量可以作为属组的初始化的大小,而C不可以;同时变量的
值不能被修改;C++利用const的这一属性,代替C中的define进行
全局常量的定义;
修饰局部变量:代表局部变量的值不能被修改;
修饰指针:这个是经常问道的,我举的例子可能不全面,但是是比较
常见的例子:
cons t int *p; //修饰的是p所指向的内容不能被改变,p可
以;
int const *p; //和上面是一样的;
int* const p; //修饰的p指针不能改变;
修饰类的成员变量:必须在初始化列表初始化,除此之外,必须在初
始化列表初始化的还有,引用类型的数据成员,没有默认构造函数的
对象成员,如果存在继承关系,如果父类没有默认的构造函数,则也
必须在初始化列表中被初始化,初始化列表对数据成员的初始化顺序
是按照数据成员的声明顺序严格执行的;
修饰类的成员函数:一般放在成员函数的最后面,修饰的是类的成员
函数中的隐藏参数this指针,代表不可以通过this指针修改类的数据
成员,声明形式例如:
Base::void fun() const;
关于const还有一个问题就是传参和赋值的问题,一般来说,const
修饰的变量是安全的,没有const修饰的变量是不安全的,一般在传
参的时候,非const修饰的的变量可以传给const修饰的,而const
修饰的不可以传给非const修饰的形参,这就相当于把安全的东西交
给了不安全的人;而赋值的话更不用说了,const修饰的不可以传给
没有const修饰的变量;