如何使用define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)

#define SECOND_PER_YEAR(60 * 60* 24 * 365)UL

需要注意的是

由于宏定义是预处理指令,而非语句,所以在进行宏定义时,不能以分号结束。

预处理只会执行简单的替换,不会计算表达式的值,所以要注意括号的使用,直接写出是如何计算出一年中有多少秒,而不是计算出实际的值。如

#define N 4 + 5

cout<<2 * N;

如果预处理计算表达式的值,那么输出结果应该是2 * (4 + 5),等于18,但实际输出结果是2 * 4 + 5,等于13。

考虑到可能存在数据溢出问题,更加规范化的写法是使用长整型类型,即UL类型,告诉编译器这个常数是长整型数。

引申:宏定义平方运算#define SQR(X) X * X是否正确?

不正确,会造成错误。如,

int b = SQR(k + m);

int c = SQR(k + m) / SQR(k + m);

执行SQR(k + m)的目的是希望执行 (k + m) * (k + m),但因为宏定义中未能规范表示,导致实际执行的是k + m * k + m,同样,执行c = SQR(k + m) / SQR(k + m)时,错误的执行了k + m * k + m /k + m * k + m。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值