当然int
and long
不是保证是相同的类型,但在 Windows 等平台上以 32 位模式编译时,它们恰好具有相同的大小,是编译器allowed将他们视为同一类型?
我不确定如何明确测试编译器是否将两种类型视为相同,但我尝试了启发式测试int *a; long *b = a;
Microsoft 编译器毫无怨言地接受这一点,而 GCC 则给出警告。编译器是否行为不当,或者它们是否命名两种不同的类型或仅命名一种,是否依赖于实现?
标准(C2011标准N1570草案)6.2.5(4)中说:
有五种标准有符号整数类型,指定为signed char
, short int
, int
, long int
, and long long int
。 (这些和其他类型可以用几种附加方式指定,如 6.7.2 中所述。)还可能有实现定义的扩展有符号整数类型。标准和扩展有符号整数类型统称为有符号整数类型。
并在同一节第 14 段中:
方式char
、有符号和无符号整数类型以及浮点类型是
统称为基本类型。基本类型是完整的对象类型。即使
实现定义了两个或多个基本类型具有相同的表示,它们是
但类型不同。
所以说int
and long
(另一种指定方式long int
) 是不同的类型。它们可能具有相同的表示、行为和对齐要求,但就语言而言,它们不是同一类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)