知りたいのですが、2 つの整数が乗算され、結果が short に型キャストされ、short に割り当てられた場合、コンパイラはそれを何に解決しますか? 以下はコードスニペットです
int a=1,b=2,c;
short x=3,y=4,z;
int p;
short q;
int main()
{
c = a*b; /* Mul two ints and assign to int
[compiler resolves this to __mulsi3()] */
z = x*y; /* Mul two short and assign to short
[compiler resolves this to __mulhi3()] */
p = (x*y); /* Mul two short and assign to int
[compiler resolves this to __mulsi3()] */
q =(short)(a*b); /* Mul two ints typecast to short and assign to short
[compiler resolves this to __mulhi3()] */
return 0;
}
ここで の場合q =(short)(a*b);
、最初の 2 つの int 乗算を ( を使用して__mulsi3()
) 実行し、それを short に割り当てます。しかし、ここではそうではありません。コンパイラの型は と の両方を short にキャストしa
てb
から、 を呼び出します__mulhi3()
。
上記の要件を達成できるように、gcc ソース コード [どのファイル] を変更する方法を知りたいです。