【发布时间】:2016-06-01 09:15:40
【问题描述】:
有没有人知道现代原生 Windows C 或 C++ 编译器允许您在 16 位和 32 位类型 int 之间进行选择?我在 80 年代遇到了一个具有此功能的交叉编译器,但我需要一个本机编译器。作为教我的学生关于可移植性和标准合规性的一部分,我希望能够自动检查他们的代码是否溢出,如果他们正在乘法,加法等两种类型的 int 数量并且结果将大于 16 位 int 可以代表。谢谢。
【问题讨论】:
-
现在是 C++ 语言的标准。 C++11 及以后的类型请参见:en.cppreference.com/w/cpp/types/integer
int32_t、int64_t等。 -
typedef并告诉你的学生使用 typedef 的数据类型? -
如果您使用
typedef,请注意它与使用原生 16 位int并不完全相同。使用类型int16_t a, b;、a + b可能会在 16 位系统上溢出,但由于通常的算术转换而不会在 32 位系统上溢出。 -
user 694733 有一个好点,但“
int16_t不是真正的int”问题在更多地方出现。常量32768不会是int16_t,表达式1<<15也不会。 -
这里有一个元级别的问题:如果你找不到一个重要的编译器,你应该费心教它吗?在您的课程中使用
long可能更容易,因为这在实际编译器上会有所不同(GCC/x64 上为 64,MSVC 上为 32)
标签: c++ c int compiler-options