结构体声明注意事项

针对单片机的上位机程序开发,经常会遇到结构体内部成员长短不一致的情况,有1字节的,有2字节的,还有4字节的。在VC编程时,如果不加处理,都会自动按照4字节进行对齐,导致赋值时出现错误。
处理方法如下:

//头文件中
#pragma pack (1)

typedef struct 			   	//文件下载
{ 	
	u8_t type;					//子帧标识
	u32_t size;					//文件大小
	u32_t number;				//本帧数据首字节编号
	u16_t count;				//本帧数据个数
	u8_t chk;					//本帧数据异或校验
	u8_t buf[512];				//数据
}FRAME_BODY_13;

#pragma pack ()

前边和后边都有,这样就不会按照4字节对齐了。

定义结构体变量的方法有很多种,最常用也是最通用的如下:

//结构体声明,放在头文件中
typedef struct Student
{
	int a;
}STU;
//结构体定义和使用,放在源文件中
STU m_Stu;
m_Stu.a = 0;
//结构体指针的定义和使用
STU *p;
p = &m_Stu;
p->a = 0;
//使用new来定义结构体和指针
STU *p = new STU;
p->a = 0;
delete p;

其中Student是结构体的名字,这个名字可写可不写。STU是用typedef为Student声明的别名,一般就用这个别名。

因为keil C51编程不支持new,所以第三种定义方法用。

你可能感兴趣的:(其他)