struct 的巨大作用,识别有经验的大神

来源:本站
导读:目前正在解读《struct 的巨大作用,识别有经验的大神》的相关信息,《struct 的巨大作用,识别有经验的大神》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《struct 的巨大作用,识别有经验的大神》的详细说明。
简介:面对一个人的大型 C/C++程序时,只看其对struct 的使用情况我们就可以对其编写者的编程经验进行评估。

面对一个人的大型 C/C++程序时,只看其对struct 的使用情况我们就可以对其编写者的编程经验进行评估。因为一个大型的C/C++程序,势必要涉及一些(甚至大量)进行数据组合的结构体,这些结构体可以将原本意义属于一个整体的数据组合在一起。从某种程度上来说,会不会用struct,怎样用struct 是区别一个开发人员是否具备丰富开发经历的标志。

在网络协议、通信控制、嵌入式系统的C/C++编程中,我们经常要传送的不是简单的字节流(char型数组),而是多种数据组合起来的一个整体,其表现形式是一个结构体。

经验不足的开发人员往往将所有需要传送的内容依顺序保存在char 型数组中,通过指针偏移的方法传送网络报文等信息。这样做编程复杂,易出错,而且一旦控制方式及通信协议有所变化,程序就要进行非常细致的修改。

一个有经验的开发者则灵活运用结构体,举一个例子,假设网络或控制协议中需要传送三种报文,其格式分别为packetA、packetB、packetC:

struct structA

{

int a;

char b;

};

struct structB

{

char a;

short b;

};

struct structC

{

int a;

char b;

float c;

}

优秀的程序设计者这样设计传送的报文:

struct CommuPacket

{

int iPacketType; //报文类型标志

union //每次传送的是三种报文中的一种,使用union

{

struct structA packetA; struct structB packetB;

struct structC packetC;

}

};

在进行报文传送时,直接传送struct CommuPacket 一个整体。

假设发送函数的原形如下:

// pSendData:发送字节流的首地址,iLen:要发送的长度

Send(char * pSendData, unsigned int iLen);

发送方可以直接进行如下调用发送struct CommuPacket 的一个实例sendCommuPacket:

Send( (char *)&sendCommuPacket , sizeof(CommuPacket) );

假设接收函数的原形如下:

// pRecvData:发送字节流的首地址,iLen:要接收的长度

//返回值:实际接收到的字节数

unsigned int Recv(char * pRecvData, unsigned int iLen);

接收方可以直接进行如下调用将接收到的数据保存在struct CommuPacket 的一个实例recvCommuPacket 中:

Recv( (char *)&recvCommuPacket , sizeof(CommuPacket) );

接着判断报文类型进行相应处理:

switch(recvCommuPacket. iPacketType)

{

case PACKET_A:

… //A 类报文处理

break;

case PACKET_B:

… //B 类报文处理

break;

case PACKET_C:

… //C 类报文处理

break;

}

以上程序中最值得注意的是

Send( (char *)&sendCommuPacket , sizeof(CommuPacket) );

Recv( (char *)&recvCommuPacket , sizeof(CommuPacket) );

中的强制类型转换:(char *)&sendCommuPacket、(char*)&recvCommuPacket,先取地址,再转化为char 型指针,这样就可以直接利用处理字节流的函数。

利用这种强制类型转化,我们还可以方便程序的编写,例如要对sendCommuPacket 所处内存初始化为0,可以这样调用标准库函数memset():

memset((char *)&sendCommuPacket,0, sizeof(CommuPacket));

提醒:《struct 的巨大作用,识别有经验的大神》最后刷新时间 2024-03-14 01:01:39,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《struct 的巨大作用,识别有经验的大神》该内容的真实性请自行鉴别。