stddef.h(c标准库)

 

 1 /*my_stddef.h*/
 2 /*
 3  * 宏NULL。不指向程序声明或分配的任何数据对象的数据对象指针的值。0,0L,(void *)0(与函数指针不兼容)。
 4  * 宏offsetof,确定一个结构成员和这个结构的起始位置的偏移量(以字节为单位),展开为一个size_t类型的整值常量表达式,表驱动函数。
 5  * ptrdiff_t:2个指针相减的结果的有符号整数类型。(2个指针不能相加,标准定义的)。不用,移植性不好。
 6  * size_t:sizeof操作符的记过的无符号整数类型。非常有用。
 7  * wchar_t:整值类型,它范围内的值可以表示最大扩展字符集中所有成员的不同编码值。用不到。
 8  */
 9 #ifndef MY_STDDEF_H_
10 #define MY_STDDEF_H_
11 
12 #define MY_NULL (void *)0
13 typedef int my_ptrdiff_t;
14 typedef unsigned int my_size_t;
15 typedef unsigned short my_wchar_t;
16 #define offsetof(T, member) ((my_size_t)&((T*)0)->member)
17 #endif
18 /*把一个整数0强制转换为一个指针类型,然后对其结果执行指针算术,c标准未定义,但offsetof实现用了,所以编译器需要支持此*/

 

 1 /*my_t_stddef.c*/
 2 #include <assert.h>
 3 #include <limits.h>
 4 #include <stdio.h>
 5 #include "my_stddef.h"
 6 
 7 typedef struct{
 8     char f1;
 9     struct{
10         float flt;
11     }f2;
12     int f3;
13 }Str;
14 
15 static char *pc = NULL;
16 static double *pd = NULL;
17 static my_size_t offs[] = {offsetof(Str, f1), offsetof(Str, f2), offsetof(Str, f3)};
18 
19 int main(void)
20 {
21     my_ptrdiff_t pd = &pc[INT_MAX] - &pc[0];
22     my_wchar_t wc = L'Z';
23     Str x = {1, 2, 3};
24     char *ps = (char *)&x;
25 
26     assert(sizeof(my_ptrdiff_t) == sizeof(my_size_t));
27     assert(sizeof(my_size_t) == sizeof(sizeof(int)));
28     assert(pd == &pc[INT_MAX] - &pc[0]);
29     assert(wc == L'Z');
30     assert(offs[0] < offs[1]);
31     assert(offs[1] < offs[2]);
32     assert(*(char *)(ps + offs[0]) == 1);
33     assert(*(float *)(ps + offs[1]) == 2);
34     assert(*(int *)(ps + offs[2]) == 3);
35     printf("sizeof(size_t) = %u\n", sizeof(my_size_t));
36     printf("sizeof(wchar_t) = %u\n", sizeof(my_wchar_t));
37     puts("succes testing stddef.h");
38     return 0;
39 }

 

转载于:https://www.cnblogs.com/kevin-kang/p/3174695.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值