枚举与宏

1. 枚举的声明,其形式为:访问修饰符 enum 枚举名: 基础类型 { 枚举成员(标识符) } 
说明:任意枚举类型都有基础类型,该基础类型可以是除 char 以外的任何整型,如:short、ushort、int、uint、long 、 ulong。基础类型必须能够表示该枚举中定义的所有枚举成员。枚举声明时可以对基础类型进行显式地声明。而没有显式声明时基础类型默认是 int。基础类型指定为每个枚举数成员分配的内存大小.
1,枚举成员不能是数值常量、字符常量、字符串常量,使用时不能加单、双引 号。
2) 每个枚举成员均具有相关联的常数值。此值的类型就是枚举的基础类  型。枚举类型属于顺序类型。根据定义类型时各枚举成员的排列顺序确定它们的序列,如在默认基础类型即int的情况下序列号从0开始,后面每个枚举成员的值依次递增 1.
3) 枚举成员是常量,不是变量。尽管是标识符也不能在程序中当做变量用赋值语句对它赋值。
4) 从枚举成员到整型的转换需要用显式类型转换来完成。 例如对于下面的语 句将枚举类型 Days类型的枚举成员通过使用强制转换来转换枚举成员为整型
5) 同一个枚举类型中任意两个枚举成员不能具有相同的名称。每个枚举成员的 常数值必须在该枚举的基础类型的范围之内。
6) 同一个枚举成员不能出现在两个或两个以上的枚举类型定义中


二,不带参数
宏定义又称为宏代换、宏替换,简称"宏"。
   格式:
   #define 标识符 字符串
其中的标识符就是所谓的符号常量,也称为"宏名"。
预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。
例:
#define Pi 3.1415926
把程序中出现的Pi全部换成3.1415926


说明:
(1)宏名一般用大写
(2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如:数组大小常用宏定义
(3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。
(4)宏定义末尾不加分号;
(5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头。
(6)可以用#undef命令终止宏定义的作用域
(7)宏定义允许嵌套
(8)字符串( " " )中永远不包含宏
(9)宏定义不分配内存,变量定义分配内存。
(10)宏定义不存在类型问题,它的参数也是无类型的。
一,带参数的宏:
除了一般的字符串替换,还要做参数代换
   格式:
   #define 宏名(参数表) 字符串
1,宏名和参数的括号间不能有空格
2,宏替换只作替换,不做计算,不做表达式求解
3,函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存
4,宏的哑实结合不存在类型,也没有类型转换。
5,宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值