在回答有关 sizeof() 的问题时,为了了解 GCC 的处理方式,我编写了以下代码:
#include<stdio.h>
#include<stddef.h>
#include<limits.h>
int main(int ac, char *argv[])
{
printf("%zu\n", sizeof(9999999999999999999999999999999999999999999999999999) );
printf("%zu %zu \n", sizeof(int), sizeof(long long));
return 0;
}
编译时,GCC (4.1.2) 发出警告(如预期的那样):
t.c:8:24: warning: integer constant is too large for its type
t.c: In function main:
t.c:8: warning: integer constant is too large for long type
输出是:
16
4 8
GCC 怎么说sizeof(9999999999999999999999999999999999999999999999999999)
是 16 ?不管有多大numnber
,对于任何大于LLONG_MAX
. 在我的 64 位平台sizeof(long)
上等于sizeof(long long)
.
为什么 GCC 会这样?这是某种未定义的行为吗?