プロトタイプがない場合や、プロトタイプに省略記号 ('...') がある場合に渡される引数の場合など、引数を渡す方法に関する特定の情報がコンパイラにない場合、コンパイラは渡すための特定の規則に従います。引数。これらの規則は基本的に、プロトタイプが使用される前の標準化前 (または K&R) C で発生したものに従います。C99 6.5.2.2/6「関数呼び出し」からの言い換え:
* the integer promotions are applied
* if the argument has float type it's promoted to double
これらのデフォルトの引数プロモーションが適用された後、引数は、コンパイラが通常引数をコピーする場所 (通常はスタック) に単純にコピーされます。したがって、構造体の引数がスタックにコピーされます。
実際の関数の実装が、コンパイラがパラメーターを作成する方法と一致しない場合、未定義の動作が発生します (値を表すことができる場合、または char へのポインターと void へのポインターを混在/一致させることができる場合は、符号付き/符号なしの不一致は例外です)。
また、C90 では、関数が暗黙的に宣言されている場合 (C99 では許可されていませんが、プロトタイプなしの関数は許可されています)、戻り値はデフォルトで として設定されintます。繰り返しますが、実際の関数は別のものを返し、未定義の動作が発生します。