C语言中的宏定义,该怎么处理
C语言中的宏定义
如上程序,不是应该在#define SECONDS_PER_YEAR 60*60*24*365后面加UL,改成#define SECONDS_PER_YEAR 60*60*24*365UL 才对吗? 为啥以上程序在VC2010能输出正确的结果: SECONDS_PER_YEAR=31536000
哪位大神可以指教一下?
------解决方案--------------------
31536000又没有超过int类型的上限...
------解决方案--------------------
int范围是-2^32 -- 2 ^32 - 1。 你没超过这个范围,自然不用做转换。
而且,如果加了UL,前面最好变为unsigned long s = SECONDS_PER_YEAR; 否则容易溢出
------解决方案--------------------
#include "stdio.h"
#define SECONDS_PER_YEAR 60*60*24*365
int main(){
int s = SECONDS_PER_YEAR;
printf("SECONDS_PER_YEAR=%d\n",s);
}
如上程序,不是应该在#define SECONDS_PER_YEAR 60*60*24*365后面加UL,改成#define SECONDS_PER_YEAR 60*60*24*365UL 才对吗? 为啥以上程序在VC2010能输出正确的结果: SECONDS_PER_YEAR=31536000
哪位大神可以指教一下?
------解决方案--------------------
31536000又没有超过int类型的上限...
------解决方案--------------------
int范围是-2^32 -- 2 ^32 - 1。 你没超过这个范围,自然不用做转换。
而且,如果加了UL,前面最好变为unsigned long s = SECONDS_PER_YEAR; 否则容易溢出
------解决方案--------------------
60*60*24*365 =31536000;没有超过int
2**32 -1 =4294967295;