が期待されるときに achar
が返されるとどうなるか誰かが知っていますか?int
char testunc1(char a)
{
return a;
}
void main()
{
int x1;
x1 = testfunc1(7);
printf("%d\n",x1);
}
が期待されるときに achar
が返されるとどうなるか誰かが知っていますか?int
char testunc1(char a)
{
return a;
}
void main()
{
int x1;
x1 = testfunc1(7);
printf("%d\n",x1);
}
は暗黙的に に変換されchar
ます。int
C99 標準のセクション6.5.16.1パラグラフ 2:
単純代入( )では
=
、右オペランドの値が代入式の型に変換され、左オペランドで指定されたオブジェクトに格納されている値が置き換えられます。
代入式のタイプは、セクション6.5.16パラグラフ 3で定義されています。
代入式の型は、左のオペランドが修飾された型を持たない限り、左のオペランドの型です。修飾された型の場合は、左のオペランドの型の非修飾バージョンです。
変数は typeint
であるため、返さchar
れる値は、C99 標準のセクション6.5.16.1int
で指定されている型に変換されます。
この場合、値7
は で完全に表すことができるため、 が変数に格納さint
れるため、精度が失われることはありません。7
int
関数が呼び出されるint
と、暗黙的に にキャストされchar
ます。127 までの値に適合するため、これchar
は問題なく機能します。その後、関数から返された結果は にキャストバックされます。これは、 に収まるすべての値に適合するようにint
再び機能します。int
char
C では、すべての算術型の間に暗黙的な変換があります。そのため、ここでは、関数に渡されるときにint
値7
が暗黙的に変換されます。戻り値を代入する場合も同様(戻り値を に変換)。char
testunc1
testfunc1
x1
char
int