2015-01-06 67 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