2,C语言宏--结构体成员的偏移:#define OFFSET(type, member) ((size_t)(&((type *)0)->member))

宏定义:结构体成员的偏移

define OFFSET(type, member) ((size_t)(&((type *)0)->member))
member对于(结构体类型)type起始的偏移,type一般为一个结构体类型

#include <iostream>
#include <stdio.h>

using namespace std;

typedef struct{
    int a;
    int b;
    char c;
    char d;
}T_type_test;

#define OFFSET(type, member) ((size_t)(&((type *)0)->member)) //member对于(结构体类型)type起始的偏移,type一般为一个结构体类型, 如:T_type_test.

int main()
{
    cout << OFFSET(T_type_test, d) << endl;

    return 0;
}

结果:
offset: 9

// ADS reserved index groups #define ADSIGRP_SYMTAB 0xF000 #define ADSIGRP_SYMNAME 0xF001 #define ADSIGRP_SYMVAL 0xF002 #define ADSIGRP_SYM_HNDBYNAME 0xF003 #define ADSIGRP_SYM_VALBYNAME 0xF004 #define ADSIGRP_SYM_VALBYHND 0xF005 #define ADSIGRP_SYM_RELEASEHND 0xF006 #define ADSIGRP_SYM_INFOBYNAME 0xF007 #define ADSIGRP_SYM_VERSION 0xF008 #define ADSIGRP_SYM_INFOBYNAMEEX 0xF009 #define ADSIGRP_SYM_DOWNLOAD 0xF00A #define ADSIGRP_SYM_UPLOAD 0xF00B #define ADSIGRP_SYM_UPLOADINFO 0xF00C #define ADSIGRP_SYM_DOWNLOAD2 0xF00D #define ADSIGRP_SYM_DT_UPLOAD 0xF00E #define ADSIGRP_SYM_UPLOADINFO2 0xF00F #define ADSIGRP_SYMNOTE 0xF010 // notification of named handle #define ADSIGRP_SUMUP_READ 0xF080 // AdsRW IOffs list size or 0 (=0 -&gt; list size == WLength/3*sizeof(ULONG)) // W: {list of IGrp, IOffs, Length} // if IOffs != 0 then R: {list of results} and {list of data} // if IOffs == 0 then R: only data (sum result) #define ADSIGRP_SUMUP_WRITE 0xF081 // AdsRW IOffs list size // W: {list of IGrp, IOffs, Length} followed by {list of data} // R: list of results #define ADSIGRP_SUMUP_READWRITE 0xF082 // AdsRW IOffs list size // W: {list of IGrp, IOffs, RLength, WLength} followed by {list of data} // R: {list of results, RLength} followed by {list of data} #define ADSIGRP_SUMUP_READEX 0xF083 // AdsRW IOffs list size // W: {list of IGrp, IOffs, Length} #define ADSIGRP_SUMUP_READEX2 0xF084 // AdsRW IOffs list size // W: {list of IGrp, IOffs, Length} // R: {list of results, Length} followed by {list of data (returned lengths)} #define ADSIGRP_SUMUP_ADDDEVNOTE 0xF085 // AdsRW IOffs list size // W: {list of IGrp, IOffs, Attrib} // R: {list of results, handles} #define ADSIGRP_SUMUP_DELDEVNOTE 0xF086 // AdsRW IOffs list size // W: {list of handles} // R: {list of results, Length} followed by {list of data} #define ADSIGRP_IOIMAGE_RWIB 0xF020 // read/write input byte(s) #define ADSIGRP_IOIMAGE_RWIX 0xF021 // read/write input bit #define ADSIGRP_IOIMAGE_RISIZE 0xF025 // read input size (in byte) #define ADSIGRP_IOIMAGE_RWOB 0xF030 // read/write output byte(s) #define ADSIGRP_IOIMAGE_RWOX 0xF031 // read/write output bit #define ADSIGRP_IOIMAGE_CLEARI 0xF040 // write inputs to null #define ADSIGRP_IOIMAGE_CLEARO 0xF050 // write outputs to null #define ADSIGRP_IOIMAGE_RWIOB 0xF060 // read input and write output byte(s) #define ADSIGRP_DEVICE_DATA 0xF100 // state, name, etc... #define ADSIOFFS_DEVDATA_ADSSTATE 0x0000 // ads state of device #define ADSIOFFS_DEVDATA_DEVSTATE 0x0002 // device state这些都是做什么用的可以获取哪些结构体
最新发布
08-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值