这2者有什么区别?据我所知,
__INT_MAX__
是在不添加库的情况下定义的,INT_MAX
是在limits.h
中定义的,但是当我包含库时,INT_MAX
会以任何方式扩展为__INT_MAX__
(或者VSCode是这么说的)。当它扩展到另一个时,为什么我还要使用 limits.h
呢?
您应该始终使用
INT_MAX
,因为这是 ISO C 标准定义的宏常量。
宏常量
__INT_MAX__
未由 ISO C 指定,因此如果您希望代码可移植,则不应使用它。该宏只是您正在使用的编译器的实现细节。其他编译器可能不会定义该宏,并会以其他方式实现 INT_MAX
。
__INT_MAX__
是一个实现定义的宏,这意味着并非所有系统都可能拥有它。 特别是,GCC 定义了这个宏,但 MSVC 没有。
另一方面,
INT_MAX
是由C标准定义的,并且对于任何符合标准的编译器都保证出现在limits.h
中。
因此,为了便于携带,请使用
INT_MAX
。
补充其他答案,当您编写将在多个平台上运行的代码时,坚持标准确实是值得的。如果不这样做,当新平台出现时,您需要做很多工作来适应它,而最好的方法通常是更改它以使其符合标准。这项工作非常枯燥无味,非常值得通过从一开始就做正确的事情来避免。 我正在开发一个数学建模器,该模型最初于 20 世纪 80 年代在
VAX/VMS上编写,早期支持多个 68000 个平台,包括 Apollo/Domain。如今,它可以在 64 位 Windows、Linux、macOS、Android 和 iOS 上运行,而这些在创建时都不存在。
INT_MAX
是limits.h头文件中定义的常量,用于指定int类型的最大值。其定义如下:
define INT_MAX __INT_MAX__
limits.h头文件是C标准库的一部分,提供了指定各种类型限制的各种常量,例如int、long和long long类型的最小值和最大值。之所以将INT_MAX
__INT_MAX__
,是因为
__INT_MAX__
是一个预定义的宏,用于指定特定平台上int类型的最大值,而INT_MAX只是该值的别名。
您可以使用
__INT_MAX__
或 INT_MAX
来获取 int 类型的最大值,但通常建议使用
INT_MAX
,因为它是在标准库头文件中定义的,因此更可移植。在C编程语言中,
INT_MAX
定义为 2147483647,这是可以存储在 32 位二进制补码整数中的最大值。
另一方面,
__INT_MAX__
是一个预定义的宏,表示在编译C程序的系统上可以存储在int类型变量中的最大值。与 INT_MAX
一样,
__INT_MAX__
的值是实现定义的,并且可能会根据所使用的特定 C 实现而变化。但是,
__INT_MAX__
是由编译器在编译期间设置的,而
INT_MAX
通常在头文件中定义(例如,limits.h
)并在运行时包含在程序中。一般来说,建议在 C 程序中使用
INT_MAX
而不是 __INT_MAX__
,因为
INT_MAX
是可移植的并且可以在任何系统上工作,而
__INT_MAX__
特定于正在编译程序的系统。INT_MAX 是一个宏,指定整型变量不能存储超出此限制的任何值。
INT_MAX 和 INT_MIN 的值可能会有所不同 从编译器到编译器。以下是 编译器中的典型值,其中整数 使用 32 位存储。
INT_MAX 的值为+2147483647。 INT_MIN 的值为-2147483648。