2012-10-24 26 views
0

vxTypes.h`_TYPE_fpos_t;`是什麼意思?

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

UPDATE 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' 

,所以我需要先了解代碼才能解決問題,有人可以解釋一下wha代碼是否做,特別是_TYPE_fpos_t;部分?

+0

那麼,這取決於'_TYPE_fpos_t'擴展到什麼。你可以試着用'gcc -E'來檢查。 –

+0

@DanielFischer可能請您檢查更新00,這可能會讓您更好地瞭解該問題 –

+0

看起來'_TYPE_fpos_t'可能展開爲'typedef long fpos_t'。但要檢查它,可以在'vxTypes.h'或者包含在頭文件中(遞歸地)查找它的定義。 –

回答

1

我有同樣的問題。假設您使用的是gcc工具集,請使用「-nostdinc」編譯器選項來防止GCC使用默認搜索路徑。 (diab工具集應該有一個類似的選項。)您的項目makefile應該已經包含一個「-I dir」條目的列表,這些條目應該使編譯器可以看到系統標頭。

0

如果宏_TYPE_fpos_t定義:

  • 定義宏_FPOS_T;
  • 致電宏_TYPE_fpos_t;
  • undefine the macro _TYPE_fpos_t

無論如何,它取決於其餘的代碼(定義_TYPE_fpos_t等)。

0

如果__RTP__沒有定義,並且_TYPE_fpos_t定義,定義_FPOS_T,調用宏_TYPE_fpos_t和取消定義_TYPE_fpos_t之後。

+0

「define _FPOS_T as _TYPE_fpos_t」 - >我沒有看到任何'\\'。 – md5

+0

感謝您的回答,您能否請解釋vxTypes.h中的第4行_TYPE_fpos_t;? –

+0

@Kirilenko你是對的,沒有「\」,它以「;」結尾。 –

0

它(_TYPE_fpos_t)是一個爲實現保留的名稱,可以根據需要使用。你在危險中干涉它。

在這種情況下,它可能是用於控制typedef爲類型fpos_t,其可以在多個標頭被限定,而應僅被定義一次(C99或更早規則下)不管如何頭的許多是包括在內以及它們的排列順序。有可能圍繞在多個頭文件中定義的其他類型和宏有類似的機制(NULL,size_t是兩個主要示例)。

學習如何從查看系統頭文件來編寫頭文件是很困難的工作。系統頭部的壓力和限制是驚人的,並導致各種扭曲。