ANSI C より前のバージョンでは、プロトタイプのない関数を使用するのが一般的でした。この場合、デフォルト タイプの昇格のみが行われました。
プロトタイプがある場合、各パラメーター式は、キャストがあるかのように、関数が期待する型に変換されます。
// Declaration
void callMe(char x, int y);
...
// Call
callMe(50, 'x');
上記の呼び出しは、呼び出しと同等です
callMe((char)50, (int)'x');
これは、パラメーターの受け渡しに関する呼び出し元と呼び出し先の間の暗黙の合意のため重要です。パラメーターが渡される方法と、パラメーターのメモリ フットプリントは、型によって異なります。呼び出し元が正しい形式でパラメーターをメモリに配置しない場合、呼び出し先はパラメーターを正しく使用できません。そのため、両者は何らかの方法で各パラメーターの型に同意する必要があります。標準では、「合意」は関数プロトタイプの形で提供されるとされています。プロトタイプが欠落している場合、標準は「デフォルトの合意」をchar
提供short
しint
ます。float
double