0

C プログラムに次のコード行があります。

sprintf(cmd, "test mergesort %n %x %x %?", A, n, x, my_cmp);

my_cmpCompare_fnであり、この関数に渡す方法を知る必要があります。この行は、テスト目的で必要なコマンドの実行を支援するために使用されます。

型の変数をこの関数に渡す方法を誰かが知っていればCompare_fn、本当に役に立ちます。

my_cmp で何も印刷しようとはしていません。Compare_fn 変数をパラメーターとして持つ関数があり、シェルで関数を実行しているだけです。

4

1 に答える 1

2

ISO C では、関数ポインタ型から への変換は定義されていませんvoid *が、ほとんどすべての実装でそのような変換が定義されています (また、POSIX では定義が必要です)。これを使用して、関数ポインタを に変換し、 で出力できvoid *ます%p。これに依存したくない場合は、C のすべての型がのオーバーレイ配列として表現unsigned charする必要があるという事実を利用できます。

Compare_fn fp;
unsigned char rep[sizeof fp];
memcpy(rep, &fp, sizeof rep);
for (i=0; i<sizeof rep; i++) printf("%.2x", rep[i]);

snprintf明らかに、必要に応じて、または独自のバイトから 16 進コードを使用して、16 進出力を stdout の代わりに文字列に格納できます。

于 2012-08-15T02:36:16.017 に答える