stddef.h头文件定义了各种变量类型和宏。这些定义中的大部分也出现在其他头文件中。
库变量
库宏
C库宏NULL是一个空指针常量的值。它可以被定义为((void *)0), 0或0L,这取决与编辑器供应商。
声明
下面是取决于编译器的NULL宏的声明:
#define NULL ((char *)0)
或
#define NULL 0L
或
#define NULL 0
实例
#include <stddef.h>
#include <stdio.h>
int main ()
{
FILE *fp;
fp = fopen("file.txt", "r");
if( fp != NULL )
{
printf("成功打开文件 file.txt\n");
fclose(fp);
}
fp = fopen("nofile.txt", "r");
if( fp == NULL )
{
printf("不能打开文件 nofile.txt\n");
}
return(0);
}
C库宏offsetof(type, member-designator)会生成一个类型为size_t的整型常量,它是一个结构成员相对于结构开头的字节偏移量。成员是由member-designator给定的,结构的名称是在type中给定的。
声明
offsetof(type, member-designator)
参数
·type -- 这是一个class类型,其中,member-designator是一个有效的成员指示器;
·member-designator -- 这是一个class类型的成员指示器。
返回值
该宏返回类型为size_t的值,表示type中成员的偏移量。
实例
#include <stddef.h>
#include <stdio.h>
struct address {
char name[50];
char street[50];
int phone;
};
int main()
{
printf("address 结构中的 name 偏移 = %d 字节。\n",
offsetof(struct address, name));
printf("address 结构中的 street 偏移 = %d 字节。\n",
offsetof(struct address, street));
printf("address 结构中的 phone 偏移 = %d 字节。\n",
offsetof(struct address, phone));
return(0);
}
编译并运行结果为:
address 结构中的 name 偏移 = 0 字节。
address 结构中的 street 偏移 = 50 字节。
address 结构中的 phone 偏移 = 100 字节。
参考:
https://www.yuque.com/docs/share/7e5c0b8a-583f-411d-9fbb-694009571043