1

私のコードは、次のエラー メッセージで正常にビルドされませんでした:

macro "hton_us" passed 2 arguments, but takes just 1

そしてそれはこの行で発生します:

hton_us( &fi.size, 1 );

ここに hton_us への参照があります

void hton_us( iu16 *us, iu8 num )
{
    iu16 local;

    while( num-- ) {
        local=*us;
        *us++=swap_us(local);
    }
}

使用するように指示された同様の質問を読みましたtypedefが、役に立ちませんでした。

4

2 に答える 2

4

ちょっとした C プリプロセッサのトリックを使用すると、マクロをスキップして関数を呼び出すことができます。

(hton_us)(&fi.size, 1);

括弧で囲むことによりhton_us、引数を指定して呼び出されなかったためにこのマクロを展開できないことをコンパイラに伝え、代わりに関数が呼び出されます。

于 2012-10-18T12:12:43.473 に答える
3

ヘッダーファイルを確認してください。おそらく次のようになっています。

#ifndef ENDIAN_LITTLE
#define hton_us(us)
#define hton_ul(ul)
#endif

したがって、おそらく ENDIAN_LITTLE は定義されていません

于 2012-10-18T12:10:03.190 に答える