我已经获得了这段代码,我不明白它为什么不编译:
typedef struct
{
uint32_t serial_number;
uint32_t ieee_address[6];
} FACTORY_CONFIG;
...
// Unlock flash (only the portion we write on)
error = FLASHD_Unlock ( writeaddress, writeaddress + sizeof ( FACTORY_CONFIG.serial_number ), 0, 0 );
当我运行它时,我收到此错误:
错误[Pe018]:预期a")"
当我改变
时FACTORY_CONFIG.serial_number
到
FACTORY_CONFIG
,它编译,一切正常。我不确定,我可以检查结构内部类型的大小吗?
答案 0 :(得分:3)
您不能像这样访问C中的类型成员。但是,您可以从实际对象中获取sizeof
。由于sizeof
是一个编译时构造,因此这些对象甚至不必有效。所以以下内容将起作用:
sizeof(((FACTORY_CONFIG *)0)->serial_number)
如果你经常使用它,或者只是为了便于阅读,你可以用它制作一个宏。
答案 1 :(得分:0)
您需要先创建对象。您正在创建的结构只是一种类型。 这样做:
sizeof (((FACTORY_CONFIG *)0)->serial_number)
答案 2 :(得分:0)
您似乎想要的是,将您的writeaddress
解释为指向struct
的对象,然后访问ieee_address
成员的地址。
这种事情要用C完成的方式是
((FACTORY_CONFIG*)writeaddress)->ieee_address
就是这样。
您使用的方法非常危险,因为您不知道编译器如何在内存中布局struct
。如果必须,可以使用offsetof
宏来获取字段的确切位置。