为什么gcc 对类型转换不报错?

比如

int f1(int *x);

int main()
{
signed char a = 0, b = 0;
f1(&a);
}

int f1(int *x)
{
*x = 0xaabb;
}

b 被改写为0xaa, 显然不是符合原来的意图。

gcc不知道你的真实意图,你的真实意图需要自己去实现.
gcc怎么知道你的调用不是下面的方式?

int f1(int *x);

int main()
{
signed char a[2], b = 0;
int ab;
f1(a);
f1(&ab);
}

int f1(int *x)
{
*x = 0xaabb;
return 0;
}

char型变量长度为1byte