当前位置: 首页 > news >正文

linux 应用中offsetof ()是个啥?

#include <stdio.h>
#include <stddef.h>
// 需要包含 <stddef.h> 否则会有以下错误, 是因为找不到offsetof()而引起
//    printf("age offset:%d\n",offsetof(Persion,age));
//main.cpp|11 col 43| error: expected primary-expression before ‘,’ token
typedef struct Persion {
   char name[50];
   char id[50];
   int age;
}Persion;
// offsetof 是个啥? 它是个宏,
// 在emacs中用tag 命令查找,找到的是在/usr/include/slang.h中定义的宏
// #ifndef offsetof
// # define offsetof(T,F) ((unsigned int)((char *)&((T *)0L)->F - (char *)0L))
// #endif
// 但这是不准确的, 我们用gcc 预处理重新查找一下, 发现它是一个内部实现
//在/usr/include/stddef.h中 406行有定义,是个宏
//#define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER)
// __builtin_offsetof 就依赖于gcc 的内部实现了, 不过不管怎么说,它还是 &((TYPE *)0L)->MEBBER

int main()
{
    printf("age offset:%ld\n",offsetof(Persion,age));
    return 0;
}

//总结: linux 应用中 offsetof 是在stddef.h 中定义的一个宏
//#define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER)

http://www.lryc.cn/news/166671.html

相关文章:

  • ununtu中vim的使用
  • SqlServer在尝试加载程序集 ID 65917 时 Microsoft .NET Framework 出错。服务器可能资源不足,或者不信任该程序集
  • Discourse 如何下载备份并恢复本地数据库
  • 激光焊接汽车PP塑料配件透光率测试仪
  • Android面试题汇总(二)
  • 最新模块化设计小程序系统源码完整版:开源可二开,支持DIY
  • edge扩展下载出现Download interrupted
  • Dokcer搭建Apache Guacamole堡垒机
  • 【Spring Boot自动装配】
  • windows彻底卸载unity
  • Java项目-苍穹外卖-Day10-SpirngTask及WebSocket
  • Spring IOC 容器:掌握 Spring 的核心技术
  • python实现批量从excel列表显示图片网址中下载图片
  • java 单元测试Junit
  • Java中Timer和TimerTask的使用
  • 计算机竞赛 机器视觉 opencv 深度学习 驾驶人脸疲劳检测系统 -python
  • DFS寻找从s到t的所有路径
  • 分享!JetBrains IDE中的GitLab支持
  • jq弹窗拖动改变宽高
  • 时间不确定度在分布式系统中的说明
  • VMware vCenter 从6.7跨版本升级至7.0U3N
  • 大麦订单生成器最新版 大麦订单一键生成截图
  • 如何对Map集合的key进行大小写转换?
  • 将函数实现放到CPP报“无法解析的外部符号...”,系VS Bug
  • 异步FIFO设计的仿真与综合技术(3)
  • 什么是区块链,解释区块链的原理和应用场景
  • 使用bert进行文本二分类
  • 用Windows Installer CleanUp Utility 在windows server上面将软件卸载干净,比如SQLSERVER
  • Java手写LinkedList和拓展
  • 机器学习(14)---逻辑回归(含手写公式、推导过程和手写例题)