首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    可能错误使用了‘offsetof’宏

    前言 问题出现于实际工作当中,最近代码里引进了一个宏offsetof(s,m),这个宏的实际作用就是用来计算结构中的某个变量在结构中的偏移量的,实际的项目是跨平台的,原来一直在windows上开发,今天发现在...#else #ifdef _WIN64 #define offsetof(s,m) (size_t)( (ptrdiff_t)&(((s *)0)->m) ) #else #define offsetof...(STest, nValue1); int n2 = offsetof(STest, nValue2); int n3 = offsetof(STest, nValue3); int n4 = offsetof...测试结果 分析 这个警告中的NULL比较扎眼,考虑把它搞掉们是不是只有NULL才会报警告呢,参考了其他平台和工具的offsetof宏定义,决定把当前环境中的offsetof宏定义改一下: #define...offsetof(s,m) (size_t)&reinterpret_cast((((s *)0)->m)) 改成 #define offsetof(s,m

    80520

    offsetof(s,m)解析「建议收藏」

    到这里,有人可能会想到offsetof(那些没用过甚至没见过的朋友别急,后面马上会详解offsetof)来解决这个问题: /*offsetof获取数据成员在数据结构中的偏移量 比如成员f在...我想那些对 offsetof有较深理解的同志一定会这么办: /*类似于offsetof的定义*/ #define SIZEOF(s,m) ((size_t) sizeof(((s *)0)...offsetof对那些搞 C++ 的人可能很熟悉,因为offsetof类似于sizeof,也是一种系统操作符,你不用考虑它是怎么定义的。...在嵌入式系统里,不同开发商,不同架构处理器和编译器都有不同的offsetof定义形式: /* Keil 8051 */ #define offsetof(s,m) (size_t)&((.../* GNU GCC 4.0.2 */ #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER) 虽然定义形式不同,

    31720

    C语言 | offsetof宏和container_of宏

    废话不多说,今天要说的两个宏分别是offsetof和container_of,第一个宏是用来计算结构体中某个成员相对于结构体的偏移量,第二个宏是已知指向结构体某个成员的指针,来计算结构体的指针。...一、offsetof 这个宏是用来计算结构体某个成员的偏移量的,所以我们先来定义一个简单的结构体类型,来说明。...二、container_of 上面介绍了offsetof宏的使用,相信不是那么难理解,那么这个宏就看起来复杂多了,但是,其实只要把思路理清楚了,也不是那么复杂。...((char *)__mptr -offsetof(type, member));将指针转化为char类型,并且减去偏移量。...(type *)((char *)__mptr -offsetof(type, member));最后将获取的指针再转化为type类型。 可能前面几句可以理解,后面就糊涂了。

    2.1K30

    【C语言】库宏offsetof(结构体成员偏移量计算宏)

    个人主页:修修修也 所属专栏: ⚙️操作环境:Visual Studio 2022 一.offsetof简介 因此,宏offsetof的作用是: 当你传入结构体的类型及其成员时,它会返回该成员在结构体中的偏移量...二.offsetof的使用 如下,我们使用offsetof打印一下结构体foo中,成员a,成员b及成员c相对于首地址的偏移量分别是多少: #include #include...printf ("offsetof(struct stu,ch) is %d\n",(int)offsetof(struct stu,ch)); printf ("offsetof(struct...stu,sz) is %d\n",(int)offsetof(struct stu,sz)); printf ("offsetof(struct stu,age) is %d\n",(int)offsetof...offsetof(struct stu,age) is 8 我们画图验证一下: 三.offsetof的实现 库函数中对offsetof的实现是这样的: #define OFFSET(type,member

    24210

    【Linux API 揭秘】container_of函数详解

    2.4 offsetof #ifndef offsetof #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) #endif...函数名称:offsetof 文件位置:include/linux/stddef.h 函数解析:该宏定义用于获取结构体中指定的成员,距离该结构体偏移量。...image-20231213152249395 TYPE:表示结构体的类型 MEMBER:表示指定的结构体成员 __builtin_offsetof:gcc内置函数,直接返回偏移量。...(type, member))); }) offsetof(type, member):计算的是结构体中的成员的偏移量,这里称为size (__mptr - offsetof(type, member...)):也就是根据我们已知的成员变量地址,计算出来结构体的首地址 ((type *)(__mptr - offsetof(type, member))):最后强制转换为(type *),结构体指针。

    33010
    领券