1. 概述
stddef.h定义了一些标准宏以及类型,是C语言标准所必须的一部分。
2. 定义
2.1 Types
序号 | 标记 | 原型 | 说明 |
---|---|---|---|
1 | ptrdiff_t | 两个指针相减的结果的有符号整数类型 | |
2 | size_t | 无符号整数类型,对数组下标或地址算数操作时使用 | |
3 | wchar_t | c++已作为基本类型,不再任何头文件定义 | 宽字节字符类型,是一个整数,可以表示实现支持的所有款字节字符编码的所有编码值 |
4 | max_align_t | c++11 | Type with widest scalar alignment |
5 | nullptr_t | typedef decltype(nullptr) nullptr_t; | 空指针类型,即nullptr是std::nullptr_t类型的(constexpr)变量。std::nullptr_t可以显式或隐式地转换为任何指针(包括类的成员函数指针),但不能显式或隐式地转换为任何其他类型 |
2.2 Macro functions
标记 | 原型 | 说明 |
---|---|---|
offsetof | offsetof (type,member) | 返回size_t类型的常量表达式,其值为结构其实位置到结构成员的偏移量,以字节为单位 |
2.3 Macro constants
宏 | 说明 |
---|---|
NULL | 通用空指针,可以作为不指向任何数据对象指针值直接使用,该宏可以定义为0/0L或(void*)0中的任何一个 |
3. NULL和nullptr的区别
1. 引入nullptr的原因
引入nullptr的原因,这个要从NULL说起。对于C和C++程序员来说,一定不会对NULL感到陌生。但是C和C++中的NULL却不等价。NULL表示指针不指向任何对象,但是问题在于,NULL不是关键字,而只是一个宏定义(macro)。
1.1 NULL在C中的定义
在C中,习惯将NULL定义为vo