日韩在线不卡免费视频一区,日韩欧美精品一区二区三区经典,日产精品码2码三码四码区,人妻无码一区二区三区免费,日本feerbbwdh少妇丰满

魚鷹單片機(jī)
認(rèn)證:優(yōu)質(zhì)創(chuàng)作者
作者動(dòng)態(tài)
幾款 USB 抓包工具對比,哪個(gè)是你心中第一?
03-21 13:59
如何將網(wǎng)頁數(shù)據(jù)轉(zhuǎn)化成C語言數(shù)組?
2024-12-05 09:28
關(guān)于RS485自動(dòng)收發(fā)那些天坑
2024-11-15 16:02
為什么大廠都在用 Yocto?
2024-10-24 13:31
什么,VSCode 竟然是代碼編輯器?
2024-10-08 09:13

為什么不建議用匿名結(jié)構(gòu)體?

匿名結(jié)構(gòu)體,看著好高大上的名字,但實(shí)際上也就那樣。

typedef struct {    
union {        
struct {             
uint8_t    bit_0:1            
;uint8_t    bit_1:1            
;uint8_t    bit_2:1            
;        
};        
uint8_t value;    
}info1;    
union{        
struct {             
uint8_t    bit_0:1            
;uint8_t    bit_1:1           
;uint8_t    bit_2:1           
 ;       
 };        
uint8_t value;   
 }info2;
}info_t;

在這個(gè)例子中,下面這個(gè)就是所謂的匿名結(jié)構(gòu)體,因?yàn)檫@個(gè) struct 沒有名字。

struct {     
uint8_t    bit_0:1    
;uint8_t    bit_1:1    
;uint8_t    bit_2:1    
;
};

因此,在訪問這個(gè) bit_0 成員時(shí),直接這樣使用就行(這種位域一般在協(xié)議對接上用的比較多):

void func()
{    
info_t info;
info.info1.bit_0 = 0;
info.info1.bit_1 = 0;
info.info1.bit_2 = 0; 
// or
info.info1.value = 0;
}

簡單一點(diǎn),而如果不使用匿名結(jié)構(gòu)體,如加上結(jié)構(gòu)體名字 value_bits

typedef struct {
union {
struct { 
uint8_t    bit_0:1           
;uint8_t    bit_1:1           
;uint8_t    bit_2:1           
 ;
}value_bits;        
uint8_t value;
}info1;    
union{ 
struct { 
uint8_t    bit_0:1            
;uint8_t    bit_1:1            
;uint8_t    bit_2:1            
;        
}value_bits;        
uint8_t value;    
}info2;
}info_t;

使用上稍微麻煩一丟丟:

void func(){    
info_t info;    
info.info1.value_bits.bit_0 = 0;    
info.info1.value_bits.bit_1 = 0;    
info.info1.value_bits.bit_2 = 0;    
// or    
info.info1.value = 0;
}

因?yàn)樯晕⒙闊┮稽c(diǎn),魚鷹以前的代碼基本使用匿名結(jié)構(gòu)體,麻煩就來了。

當(dāng)魚鷹要把 armcc 編譯的代碼,轉(zhuǎn)移到 gcc 編譯,發(fā)現(xiàn)根本編譯不過去,直接報(bào)錯(cuò)。

error: invalid use of ‘struct data_def::<unnamed union>::value_bit’

有可能有方法可以設(shè)置 gcc 編譯支持匿名結(jié)構(gòu)體,但是魚鷹也不想深究,改了就是。

因此,為了代碼的通用性,建議大家不要寫一些奇奇怪怪的代碼,否則這樣的代碼一多,如果出現(xiàn)警告或者錯(cuò)誤,改起來也是一件很麻煩的事情。

聲明:本內(nèi)容為作者獨(dú)立觀點(diǎn),不代表電子星球立場。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請聯(lián)系:editor@netbroad.com
覺得內(nèi)容不錯(cuò)的朋友,別忘了一鍵三連哦!
贊 1
收藏 2
關(guān)注 160
成為作者 賺取收益
全部留言
0/200
成為第一個(gè)和作者交流的人吧