Вопрос о типе punning: почему этот код нарушает строгие правила псевдонимов:
int main()
{
int a = 1;
short j;
printf("%i\n", j = *((short*)&a));
return 0;
}
и это не так:
int main()
{
int a = 1;
short j;
int *p;
p=&a;
printf("%i\n", j = *((short*)p));
return 0;
}
Создайте gcc -fstrict-aliasing
.
Спасибо!