假设我想编写一个C程序(C99或C2011),我希望它是完全可移植的,而不是绑定到特定的体系结构。C中的整数类型
看来,我会那么想从旧的整数类型(int
,long
,short
)和朋友一刀两断,并使用只有int8_t
,uint8_t
,int32_t
等(也许使用的least
和以及fast
版本)。
然后是main
的返回类型是什么?或必须我们要与int
?标准要求是否为int
?
GCC-4.2让我写
#include <stdint.h>
#include <stdio.h>
int32_t main() {
printf("Hello\n");
return 0;
}
,但我不能使用uint32_t
甚至int8_t
因为那时我得到
hello.c:3: warning: return type of ‘main’ is not ‘int’
这是因为一个typedef,毫无疑问的。看起来这是一种情况,我们不得不使用未指定的大小类型,因为它不是真正的可移植的,除非我们将返回类型留给目标架构。这个解释是否正确?在代码库中只有一个普通的旧版本int
似乎很奇怪,但我很乐意实用。
使用'int'作为'main()'的返回类型,你会发现什么样的可移植性问题? – JasonD 2013-02-12 14:52:02
从任何机器上编译的意义来说,int都是可移植的。现在,如果你说要尝试返回12344567891233445567,那么你会遇到问题,但让我们老实说,你最后一次这样做了吗?所有返回的数字都应该相当小。例如错误代码。 – 2013-02-12 14:53:39
我意识到在这种情况下使用'int'使得程序可移植,而在其他地方,似乎可移植性要求使用固定大小的类型。也许这只是一个必要的不对称。 – 2013-02-12 14:54:42