2012-10-24 25 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是两个主要示例)。

学习如何从查看系统头文件来编写头文件是很困难的工作。系统头部的压力和限制是惊人的,并导致各种扭曲。