有没有人知道现代本机Windows C或C ++编译器允许您在16位和32位类型int之间进行选择?我在80年代遇到过具有此功能的交叉编译器,但我需要一个本机编译器。作为教我的学生关于可移植性和标准兼容性的一部分,我希望能够自动检查他们的代码是否溢出,如果它们是相乘,添加等两个类型int数量,结果将大于16位int可以代表。感谢。
答案 0 :(得分:1)
请参阅C ++ 11及更早版本中定义的整数类型:http://en.cppreference.com/w/cpp/types/integer:int8_t
,int16_t
,int32_t
,int64_t
几乎所有现代C ++编译器都应该支持这些:GCC you can use MinGW on Windows,MSVC,Intel,Clang,甚至是Borland/Codegear/Embarcardero,因为它们现在属于标准。
自C99起,固定宽度整数类型已成为C语言的一部分,但最终在C ++ 11中添加到C ++中,请参阅:N1988
答案 1 :(得分:1)
C ++编译器确实支持短路。如果这是用于教学,你不能告诉你学生使用短裤而不是整数吗?
如果目的只是告诉他们有关溢出的问题,那么为什么不能使用可能导致溢出的整数向程序提供输入?投入如20亿+ 20亿或20亿x 6?
当这是一个问题时,人们还习惯于定义自己的常量,如INT16,并将它们映射到底层数据类型;比如INT16 == C ++的缩写。
最后,如果你遇到short问题,C ++确实提供了一个16位整数类型作为自C ++ 11以来的标准数据类型。
如果你确实需要一个16位的int,你可以在Digital Mars等编译器中找到它,它允许你定位Win 16 API,或旧版本的Visual Studio。