次のように宣言するとします。
void foo(uint64_t);
そして、この関数は外部アセンブリ ファイルで定義されます。今、C コードから次のように呼び出します。
uint32_t x = 42;
foo(x);
にx
キャストされるのはuint64_t
いつですか?関連するターゲットの ABI によって義務付けられている任意のレジスタ/スタックの場所でアセンブリ コードを常に受け取ることに依存できますかuint64_t
、それとも自分でキャストを行う必要がありますか?
言い換えれば、関数定義がコンパイラで利用できない場合foo(x)
、foo((uint64_t)x)
同等ですか? ばかげた質問かもしれませんが、ここで実際に何が起こるかわかりません。