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;
部分吗?
答案 0 :(得分:1)
我遇到了同样的问题。假设您正在使用gcc工具集,请使用“-nostdinc”编译器选项来阻止GCC使用默认搜索路径。 (diab工具集应该有类似的选项。)你的项目makefile应该已经包含一个“-I dir ”条目列表,这些条目应该使编译器可以看到系统头。
答案 1 :(得分:0)
如果定义了宏_TYPE_fpos_t
:
_FPOS_T
; _TYPE_fpos_t
; _TYPE_fpos_t
。无论如何,它取决于代码的其余部分(_TYPE_fpos_t
的定义等)。
答案 2 :(得分:0)
如果未定义__RTP__
且定义了_TYPE_fpos_t
,请定义_FPOS_T
,然后调用宏_TYPE_fpos_t
并取消定义_TYPE_fpos_t
。
答案 3 :(得分:0)
它(_TYPE_fpos_t
)是为实现保留的名称。你可以自担风险。
在这种情况下,它可能用于控制类型typedef
的{{1}},它可以在多个标题中定义,但只应定义一次(在C99或更早的规则下),无论如何包括多少标题以及包含它们的顺序。围绕在多个标头中定义的其他类型和宏有可能存在类似的机制(fpos_t
,NULL
是两个主要示例。)
学习如何通过查看系统标头来编写标头是一项艰苦的工作。系统头部的压力和约束是惊人的,并导致各种扭曲。