比如
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;
}