Predeclare标记结构

Predeclare标记结构,c,struct,typedef,C,Struct,Typedef,某些C包含文件使用以下约定: typedef struct YOUSHALLNOTUSETHISNAME { // members } USETHISNAME; 在这种情况下,我应该如何使用predeclare这个名称?打破惯例说 typedef struct YOUSHALLNOTUSETHISNAME USETHISNAME; 问题是我无法控制定义结构的头。我不想包含定义结构的标题,因为在本例中它是一个真正的beast:windows.h 注: 这个问题与以下方面密切相

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

typedef struct YOUSHALLNOTUSETHISNAME
    {
//  members
    } USETHISNAME;
在这种情况下,我应该如何使用predeclare这个名称?打破惯例说

typedef struct YOUSHALLNOTUSETHISNAME USETHISNAME;
问题是我无法控制定义结构的头。我不想包含定义结构的标题,因为在本例中它是一个真正的beast:
windows.h

注:

这个问题与以下方面密切相关。

改进:

然后,大多数进一步出现的
您不能使用此名称将被拒绝,但淘气的开发人员稍后可能会:

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

  typedef struct YOUSHALLNOTUSETHISNAME USETHISNAME;
另外,您确定要避免
#包括
?也许您只需要预编译头。有些编译器提供了这一功能



然而,我认为这不仅仅是一个技术问题,更是一个社会问题。您应该记录人们不应该使用
您不应该使用此名称

,这似乎很好:您只使用了一次不被使用的名称,并且在(大概)相同的头文件中,因此它不会在头文件之外的任何地方使用。真正的目的是后者。如果我是标题的作者,这个答案适用。但我不是,我在使用内部名称时犯了一个错误。
  typedef struct YOUSHALLNOTUSETHISNAME USETHISNAME;