我在/usr/include/limits.h中找到了以下定义:
# define INT_MIN (-INT_MAX - 1)
# define INT_MAX 2147483647
此外,似乎此头文件中的所有XXX_MAX都是从数字常量中明确定义的.
我想知道是否有一种可移植的方式(跨平台的不同字大小)来定义INT_MAX?
我尝试了以下方法:
~((int)-1)
但这似乎不正确.
一个简短的解释也受到高度重视.
对于INT_MAX
标准头文件limits.h
,实现者的手由于需要在预处理器#if
指令中使用它而受到限制.这排除了涉及sizeof
或演员的任何事情.
如果你只想要一个在实际C表达式中工作的版本,也许这会起作用:
(int)-1U/2 == (int)(-1U/2) ? (int)-1U : (int)(-1U/2)
Run Code Online (Sandbox Code Playgroud)
这里的概念是int
可以具有相同数量的值位unsigned
,或者一个更少的值位; C标准允许.为了测试它是什么,检查转换结果(int)-1U
.如果-1U
适合int
,其值必须由强制转换保持不变,因此相等性将为真.如果-1U
不适合int
,则转换将生成类型的实现定义结果int
.然而,无论价值是什么,仅仅通过可能值的范围,平等将是错误的.
请注意,从技术上讲,转换int
可能会导致实现定义的信号被提升,而不是获得实现定义的值,但是当您处理将在以下计算的常量表达式时,这不会发生.编译时间.