enum定义时typedef的前与后

enum类型通常会与typedef关键字一起用,方便使用.

有两种写法,

第一种是typedef在enum前边,如:

typedef  enum {

    UIViewAnimationCurveEaseInOut,         // slow at beginning and end

    UIViewAnimationCurveEaseIn,            // slow at beginning

    UIViewAnimationCurveEaseOut,           // slow at end

    UIViewAnimationCurveLinear

} UIViewAnimationCurve;


第二种写法是在enum后边, 这样写往往是存在<<运算符(严格来说已经不是一个语句了,而是两个,但这两个语句是一个整体,缺一不可):

enum {

DDLogMessageCopyFile     = 1 << 0,
DDLogMessageCopyFunction = 1 << 1,
};
typedef int DDLogMessageOptions;

两者有何区别呢?先看DDLogMessageOptions定义体, <<是左移运算,定义这样一些值通常是为了使这些值除了离散的options之外还有"|"运算的目的,从而组成更多的options,也就是options不仅限定义体中的那几个.

这时如果用如下定义,

typedef enum {

DDLogMessageCopyFile     = 1 << 0,
DDLogMessageCopyFunction = 1 << 1,
} DDLogMessageOptions;

那么

DDLogMessageOptions op = DDLogMessageCopyFile | DDLogMessageCopyFunction 将编译不过(VS会报错,Xcode却不报语法错误,看来Xcode标准遵循得不是很好), 也许有人说强制转型, 但不转型显然更合逻辑与简练.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值