Predeclare标记结构

时间:2015-01-06 10:03:38

标签: c struct typedef

某些C包含文件使用以下约定:

typedef struct YOUSHALLNOTUSETHISNAME
    {
//  members
    } USETHISNAME;

在这种情况下,我应该如何预先宣布USETHISNAME?打破惯例并说出

typedef struct YOUSHALLNOTUSETHISNAME USETHISNAME;

问题是我无法控制定义结构的头。而且我不想包含定义结构的头部,因为在这种情况下它是一个真正的野兽:windows.h

注意:

此问题与Forward declare FILE *密切相关。

1 个答案:

答案 0 :(得分:0)

改进Gopi's deleted answer

 typedef struct YOUSHALLNOTUSETHISNAME {
   // some fields
 } USETHISNAME;
 #define YOUSHALLNOTUSETHISNAME %%%some@thing!bad$for*the^C%compiler

然后,YOUSHALLNOTUSETHISNAME的大多数事件都会被拒绝,但顽皮的开发人员可能会在以后:

 #undef YOUSHALLNOTUSETHISNAME

顺便说一句,如果您不想定义struct YOUSHALLNOTUSETHISNAME的字段(应该由另一个标题提供),您可以

  typedef struct YOUSHALLNOTUSETHISNAME USETHISNAME;

另外,您确定要避免#include <windows.h>吗?也许你只需要预编译的头文件。有些编译器提供了这个功能。


但是,我认为这不仅仅是一个技术问题,而是一个社会问题。您文档应该不使用 YOUSHALLNOTUSETHISNAME