2015-01-06 97 views
0

某些C包括以下约定文件的用途:预先声明标记结构

typedef struct YOUSHALLNOTUSETHISNAME 
    { 
// members 
    } USETHISNAME; 

我应该如何在这种情况下,预先声明USETHISNAME?打破约定,并说

typedef struct YOUSHALLNOTUSETHISNAME USETHISNAME; 

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

注:

这个问题是密切相关的Forward declare FILE *

+0

这似乎罚款:你正在使用的不是将要使用的名称只一次了,里面(大概)相同的头文件,因此它赢得了”无论如何都可以在头文件之外的任何地方使用。后者才是真正的目的。 – Evert

回答

0

提高对Gopi's deleted answer

typedef struct YOUSHALLNOTUSETHISNAME { 
    // some fields 
} USETHISNAME; 
#define YOUSHALLNOTUSETHISNAME %%%[email protected]!bad$for*the^C%compiler 

随后的YOUSHALLNOTUSETHISNAME大多数的再次发生将被拒绝,但后来一个顽皮的开发商仍然可以:

#undef YOUSHALLNOTUSETHISNAME 

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

typedef struct YOUSHALLNOTUSETHISNAME USETHISNAME; 

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


但是,我认为这不仅仅是一个技术问题,更是一个社会问题。你应该文件人们应该不使用YOUSHALLNOTUSETHISNAME

+0

如果我是标题的作者,此答案适用。但我不是,我在使用内部名称时犯了一个错误。 – user877329