我在/usr/include/limits.h中找到了以下定义:
# define INT_MIN (-INT_MAX - 1)
# define INT_MAX 2147483647
另外,似乎该头文件中的所有 XXX_MAX 都是从数字常量显式定义的。
我想知道是否有一种可移植的方法(针对跨平台的不同字长)来定义 INT_MAX ?
我尝试了以下方法:
~((int)-1)
但这似乎是不正确的。
简短的解释也受到高度重视。
For the INT_MAX
在标准头文件中limits.h
,实现者的手脚被它需要在预处理器中使用这一事实所束缚#if
指令。这排除了任何涉及sizeof
或演员表。
如果您只想要一个适用于实际 C 表达式的版本,也许这会起作用:
(int)-1U/2 == (int)(-1U/2) ? (int)-1U : (int)(-1U/2)
这里的概念是int
可以具有相同数量的值位unsigned
,或少一个值位; C 标准允许其中任何一个。为了测试它是什么,检查转换的结果(int)-1U
. If -1U
适合int
,其值必须不会因强制转换而改变,因此相等性为真。如果-1U
不适合int
,那么转换结果会产生类型的实现定义结果int
。然而,无论该值是什么,仅仅通过可能值的范围,相等性就会是错误的。
请注意,从技术上讲,转换为int
可能会导致引发实现定义的信号,而不是获得实现定义的值,但是当您处理将在编译时评估的常量表达式时,这种情况不会发生。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)