對程序員的經驗進行評估可以通過看其對struct結構體的使用情況。
會不會用struct,怎樣使用struct,是區別一個開發人員是否具備豐富開發經歷的標誌。
在嵌入式系統的C/C++代碼編程中,經常要傳送的不是簡單的字節流(char型數組),而是多種數據組合起來的一個整體,表現形式就是結構體。而經驗不足的開發人員使用char型數組,通過指針偏移的方式進行報文傳送。這樣做一編寫複雜,出錯率高,可移植性差。
例:
傳送A,B,C三種報文。
struct A
{
int a;
char b;
};
struct B
{
char a;
short b;
};
struct C
{
int a;
char b;
float c;
};
優秀的報文設計:
struct commu_packet
{
int packet_type;
union
{
struct A packetA;
struct B packetB;
struct C packetC;
};
};
這樣在傳送報文時就可以直接傳送struct commu_packet.
假如發送函數原型如下:
//pSendData:要發送字節流的首地址
//iLen: 要發送的字節流長度
send(char *pSendData,unsigned int iLen)
{
......
};
j接收函數原型如下:
//pRcevData:接收字節流首地址
//ILen: 要接受字節流長度
//return: 返回實際收到的字節數
unsigned int recv(char *pRcevData,unsigned int iLen)
{
......
};
則,發送struct commu_packet的一個實例send_packet如下:
send((char*)&send_packet,sizeof(commu_packet));
接收保存在struct commu_packet的一個實例recv_packet如下:
recv((char*)&recv_packet,sizeof(commu_packet));
接着,判斷報文類型並進行處理:
……
switch(recv_packet.packet_type)
{
case packetA:
……
break;
case packetB:
……
break;
case packetC:
……
break;
}