0

vxTypes.h

#if !defined(__RTP__)
#ifdef _TYPE_fpos_t
#define _FPOS_T
_TYPE_fpos_t;
#undef _TYPE_fpos_t
#endif
#endif /* __RTP__ */

更新 00:

stdio.h

typedef struct fpos_t
    {   /* file position */
    long _Off;  /* can be system dependent */
    _Mbstatet _Wstate;
    } fpos_t

fpos_t型にコンパイル エラー (競合) があります

error: conflicting declaration 'struct fpos_t'...'fpos_t' has a previous declaration as `typedef long int fpos_t'

だから私はそれを修正するために最初にコードを理解する必要があります.誰かがコードが何をするのか、特にその_TYPE_fpos_t;部分を説明できますか?

4

4 に答える 4

1

私も同じ問題を抱えていました。gcc ツールセットを使用している場合、「-nostdinc」コンパイラ オプションを使用して、GCC がデフォルトの検索パスを使用しないようにします。(diab ツールセットにも同様のオプションが必要です。) プロジェクトの makefile には、システム ヘッダーをコンパイラから見えるようにする"-I dir " エントリのリストが既に含まれている必要があります。

于 2013-02-05T18:11:19.540 に答える
0

( _TYPE_fpos_t) は、実装が必要に応じて使用するために予約されている名前です。あなたは危険を冒してそれを妨害します。

この場合、複数のヘッダーで定義される可能性がtypedefある type の制御に使用さfpos_tれる可能性がありますが、含まれるヘッダーの数や順序に関係なく、(C99 以前のルールで) 1 回だけ定義する必要があります。それらは含まれています。複数のヘッダーで定義されている他の型やマクロにも同様のメカニズムが存在する可能性があります (NULLsize_t主な例です)。

システム ヘッダーを見てヘッダーの書き方を学ぶのは大変な作業です。システム ヘッダーに対するプレッシャーと制約は驚異的であり、あらゆる種類のゆがみにつながります。

于 2012-10-24T14:43:52.823 に答える
0

マクロ_TYPE_fpos_tが定義されている場合:

  • マクロを定義し_FPOS_Tます。
  • マクロを呼び出し_TYPE_fpos_tます。
  • マクロを未定義にし_TYPE_fpos_tます。

とにかく、それはコードの残りの部分 (_TYPE_fpos_t特に の定義) に依存します。

于 2012-10-24T14:14:31.670 に答える
0

__RTP__が定義されておらず、定義されている場合は_TYPE_fpos_t、 を定義_FPOS_Tし、マクロを呼び出して、後で_TYPE_fpos_t未定義にします。_TYPE_fpos_t

于 2012-10-24T14:14:54.180 に答える