iar中extern 对象在.h里面定义为什么不能声明16位和8位整型,有什么办法解决吗
时间: 2024-03-25 13:41:03 浏览: 15
在IAR中,我们可以使用特殊的类型定义语法来解决在头文件中定义extern对象时不能声明16位和8位整型的问题。这种语法称为"Packed"结构体或联合体,可以在定义时指定成员的精确大小和对齐方式,从而允许我们在头文件中定义16位和8位的extern对象。
定义Packed结构体或联合体的语法如下:
```c
#pragma pack(push, 1) // 指定成员的精确大小和对齐方式
typedef struct {
uint16_t var1; // 16位整型成员
uint8_t var2; // 8位整型成员
} PackedStruct_t;
#pragma pack(pop) // 恢复默认对齐方式
```
其中,`#pragma pack(push, 1)`表示将当前对齐方式入栈,并指定成员的精确大小和对齐方式为1字节;`#pragma pack(pop)`表示恢复默认的对齐方式。
在使用Packed结构体或联合体定义extern对象时,我们需要在头文件中包含定义,以便在其他文件中使用。例如:
```c
#pragma pack(push, 1)
typedef struct {
uint16_t var1;
uint8_t var2;
} PackedStruct_t;
#pragma pack(pop)
extern PackedStruct_t myExternVar;
```
这样,我们就可以在其他文件中使用myExternVar变量了。需要注意的是,使用Packed结构体或联合体定义extern对象时,应该遵循数据对齐原则,确保变量的访问正确性和可移植性。