2

ここで少し問題が発生しています。マシンコードと関数ポインターをいじっています。また、VC++ が単にコンパイルを拒否するコードが少しあります。

これは、期待どおりに正確にコンパイルおよび実行されます。

#include <stdlib.h>
#include <stdio.h>

int main()
{
    char tarr[] = {0xb8, 222, 0, 0, 0, 0xc3};

    int (*testfn)() = tarr;

    printf("%d", testfn()); // prints 222

    getchar();
}

ただし、Visual C++ Expressは次のものをコンパイルせず、このエラーが発生します。error C2143: syntax error : missing ';' before 'type'

#include <stdlib.h>
#include <stdio.h>

int main()
{
    char* tarr = (char*) malloc(1000);
    tarr[0] = 0xb8;
    tarr[1] = 222;
    tarr[2] = 0;
    tarr[3] = 0;
    tarr[4] = 0;
    tarr[5] = 0xc3;

    int (*testfn)() = tarr; // syntax error here

    printf("%d", testfn());

    getchar();
}

おそらく欠陥のあるコードを見てきましたが、何か問題はありません。どうしたの?足りないものはありますか?

4

2 に答える 2

1

このコードは、GCC では警告付きでコンパイルされ、G++ ではコンパイルに失敗します。その行にキャストがありません。メインからの戻り値もありません。

    int (*testfn)() = (int (*)()) tarr; // no more syntax error?
于 2010-02-12T12:56:34.063 に答える
1

これはCコードですか?その場合、C99 でない場合は、testfd の宣言を tarr[X] への割り当ての前に移動する必要があります。

于 2010-02-12T12:59:04.893 に答える