标准说,在部分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”指令对合格程序的影响来定义。 –