標準說,在部分17.6.1.2第4段:GCC可以修改用於C++特性的C頭文件嗎?
除非如條款[language.support]注意到通過[線程]和 附件[DEPR],各標題的內容CNAME應如相應標題名稱h的 那樣,如在標準庫([intro.refs])或C Unicode TR中酌情指定的 ,如同通過包含一樣。
然後,在部分18.2,但第2段:
的內容是一樣的標準C庫頭
<stddef.h>
, 具有以下變化:
我讀這意味着<cstddef>
必須包括<stddef.h>
未修改。但是GCC有這個在他們的頭文件:
/usr/lib/gcc/$TRIPLET/5.3.1/include/stddef.h
#if defined (_STDDEF_H) || defined (__need_NULL)
#undef NULL /* in case <stdio.h> has defined it. */
#ifdef __GNUG__
#define NULL __null
#else /* G++ */
#ifndef __cplusplus
#define NULL ((void *)0)
#else /* C++ */
#define NULL 0
#endif /* C++ */
#endif /* G++ */
#endif /* NULL not defined and <stddef.h> or need NULL. */
#undef __need_NULL
這是法律的標準?
這類問題的關鍵問題是始終「你能寫出一個可以區分差異的合格程序嗎?」 –
C和C++標準庫標頭不必是操作系統中filesysyem中的實際文件,您可以在編輯器中打開它並查找。它們是抽象的實體,只能通過它們各自的「#include」指令對合格程序的影響來定義。 –