也許我錯過了一些東西,但可能有人請解釋下面的代碼背後的「邏輯」?在C++中混淆無數#ifndef語句(無值)的嵌套
#ifndef _PTRDIFF_T
#ifndef _T_PTRDIFF_
#ifndef _T_PTRDIFF
#ifndef __PTRDIFF_T
#ifndef _PTRDIFF_T_
#ifndef _BSD_PTRDIFF_T_
#ifndef ___int_ptrdiff_t_h
#ifndef _GCC_PTRDIFF_T
#define _PTRDIFF_T
#define _T_PTRDIFF_
#define _T_PTRDIFF
#define __PTRDIFF_T
#define _PTRDIFF_T_
#define _BSD_PTRDIFF_T_
#define ___int_ptrdiff_t_h
#define _GCC_PTRDIFF_T
#ifndef __PTRDIFF_TYPE__
#define __PTRDIFF_TYPE__ long int
#endif
typedef __PTRDIFF_TYPE__ ptrdiff_t;
#endif /* _GCC_PTRDIFF_T */
#endif /* ___int_ptrdiff_t_h */
#endif /* _BSD_PTRDIFF_T_ */
#endif /* _PTRDIFF_T_ */
#endif /* __PTRDIFF_T */
#endif /* _T_PTRDIFF */
#endif /* _T_PTRDIFF_ */
#endif /* _PTRDIFF_T */
爲什麼這優於簡單的:
#ifndef xyz
#define xyz
#endif
???
我可以看到它們是嵌套的,但它很混亂。 ...和順便說一句,他們定義了什麼,因爲在標識符後沒有任何值?
是的,我喜歡你的重構好得多!因此,在執行'#define'操作之前,所有'#ifndef'條目都必須爲TRUE? – Les
是的,因爲它們是嵌套的。只要其中一個失敗(即,其中一個宏已經定義),所有匹配'#endif'的內容都會被跳過。關於嵌套,它就像正常的'if's一樣工作。 – Angew