При ответе на вопрос о том, что SizeOf(), чтобы посмотреть, как GCC ручки, я написал следующий код:Поведение SizeOf() в C (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
, всегда 16 для любого целочисленного литерала, превышающего LLONG_MAX
. На моей 64-битной платформе sizeof(long)
равен sizeof(long long)
.
Почему GCC ведет себя так? Это какое-то неопределенное поведение ?!
Кстати, 'sizeof' является ** не ** функцией, поэтому на самом деле это не должно быть написано' sizeof() ', поскольку это означает, что это так. – unwind
@unwind: Вы не можете иметь 'sizeof long long', насколько я знаю. 'sizeof (T)' является общим и точным. – Puppy
@unwind Я знаю, что sizeof() не является функцией, а оператором. Но я не вижу никаких проблем с упоминанием sizeof(). –