我已经多次询问过这个问题,但出于某种原因,当我尝试将offsetof与stddef.h标头一起使用时,它不会在我的eclipse IDE中解析这个宏。相反,我试图通过手动计算来访问该结构。该结构仅由指针组成。
这是我目前的代码。
int chkpinmode(int header, int pin)
{
/*
* WARNING: This piece of code has no error checking yet!
*/
//Calculations...
unsigned int pinoffset=0;
if(header==8)
{//byte offset
pinoffset=((pin-2)*4);
}
else if(header==9)
{//byte offset
pinoffset=( (44 * 4)+( pin - 11 ) * 4 );//Defines at what point to look at the structure
}
char * pinConf=(char *)(&pins+pinoffset);//No need to worry about padding because structure is made up of pointers
int pinConfValue=-10;
pinConfValue=(int)pinConf;
int mode;
mode=(int)(pinConfValue&7);//Checks one the first 3 bits
return mode;
}
该结构是一个包含一个volatile void *的volatile int *的长列表,它由另一个函数给出地址。头文件有
extern pins;
这是结构。因此,在调用chkpinmode函数时,将设置所有地址。
答案 0 :(得分:0)
使用offsetof()编译代码时,它会起作用。只是eclipse IDE将它标记为错误,但它会起作用。