【发布时间】:2012-07-01 11:23:56
【问题描述】:
我公司的stdint.h 标题为:
#define INT64_MIN -9223372036854775808LL
但在我项目的一些代码中,一位程序员写道:
#undef INT64_MIN
#define INT64_MIN (-9223372036854775807LL -1)
然后他在代码中使用了这个定义。
项目编译时没有警告/错误。
当我试图删除他的定义并使用默认定义时,我得到了:
error: integer constant is so large that it is unsigned
这两个定义似乎是等价的。
为什么一个编译好而另一个编译失败?
【问题讨论】:
-
标准头文件中的#define导致错误是不是有点吓人?
-
@fvu:没关系,事实证明问题只是 abelenky 的雇主用他们自己的损坏版本替换了标准标题(见下面的 cmets)。
-
@SteveJessop 我在讨论中看到了这对我来说似乎是一个非常愚蠢的想法。
-
这能回答你的问题吗? Why do we define INT_MIN as -INT_MAX - 1?