3

私は以下のようなコードを試していました。

int TestMethod(int a, int b)
{
    printf("In TestMethod %d, %d \r\n", a, b);
    return 0;
}


int main(void)
{

    void (*ap_cb_function)() = (void(*)())TestMethod;
    ap_cb_function();

    return 0;
}

gcc コンパイラでうまく動作します。これにより、a と b のランダムな値が出力されます。これはどのように作動しますか?行でエラーが発生することを期待していました:

void (*ap_cb_function)() = (void(*)())TestMethod;
4

1 に答える 1

2

関数の引数は、プラットフォームの ABI に応じて、レジスタまたはスタックで渡されます。引数を指定しない場合、呼び出された関数のビューから、いくつかのランダムな値 (レジスタ内またはスタック上) がまだ存在します....

于 2013-10-09T05:28:27.657 に答える