我正在一个已经启动的程序中执行一些功能,我看到它在标题中:
#include <stddef.h>
#include <stdio.h>
而且我不明白为什么要包含该库stddef.h
,因为根据我在谷歌中搜索的内容,该库提供的是NULL
指针类型变量的常量(除其他外,但我不在程序中使用)。
使用指针时,我经常使用 NULL。
但事实证明,如果我删除该包含,该程序无论如何都可以正常工作。仿佛书店stdio.h
已经给了我不变的NULL
一样。
你认为它可能是什么?
我无法显示代码,给我程序的人也无法回答我。
页眉
<stddef.h>
。根据我们可以在 cppreference 中查阅的文档,标头
在 C11 之前:<stddef.h>
提供以下内容:size_t
: type alias(typedef
) 为无符号整数类型。它用作运算符的返回值sizeof
。ptrdiff_t
type alias(typedef
) 为有符号整数类型。它用作指针运算的结果。NULL
定义为宏的常量,其值取决于实现,并且是空指针的值。offsetof
计算结构的开始和该结构的成员之间的偏移量的宏函数。max_align_t
typedef
在具有与任何其他标量类型一样好的对齐要求的类型上的类型别名 ( )。alignas
关键字的语法糖宏_Alignas
。alignof
关键字的语法糖宏_Alignof
。noreturn
关键字的语法糖宏_Noreturn
。c头文件和c++头文件之间的区别。
C++ 使许多 C 库适应它自己的特性,对命名空间中的函数进行分类或将一些函数转换为模板,当 C 库适应 C++ 时,它的文件接收一个
c
作为前缀并删除扩展名。您应该使用特定于语言的标头,因此如果您使用 C++ 编程而不是使用<stddef.h>
您应该使用<cstddef>
,请阅读此线程以了解更多信息。标头可能包括其他标头。您正在使用的其他标头可能包括
<stddef.h>
,因此您将收到NULL
. 例如,如果我们查看GCC 的实现<stdio.h>
,我们会发现它所做的第一件事实际上是包括<stddef.h>
:sttdef.h头文件定义了几个标准定义(类型和宏)。其中许多定义也出现在其他头文件中,例如在stdio.h中,这就是为什么不包含 sttdef.h 看不到代码更改的原因。除了宏之外,此标头还定义(如此处所示)
NULL
变量:在我留给您的链接中,它们定义了每个变量,并显示了使用其中一个宏 (offsetof) 的示例。
他们可能希望您在程序中的某个地方进行类似的使用,但如果您说一切正常,则无需包含标题。