91视频免费?看_蜜芽MY188精品TV在线观看_国产免费无遮挡在线观看视频_深夜国产_亚洲精品欧洲精品_欧美黑人粗暴多交

為什么不建議用匿名結構體?

匿名結構體,看著好高大上的名字,但實際上也就那樣。

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;

在這個例子中,下面這個就是所謂的匿名結構體,因為這個 struct 沒有名字。

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

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

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;
}

簡單一點,而如果不使用匿名結構體,如加上結構體名字 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;
}

因為稍微麻煩一點,魚鷹以前的代碼基本使用匿名結構體,麻煩就來了。

當魚鷹要把 armcc 編譯的代碼,轉移到 gcc 編譯,發現根本編譯不過去,直接報錯。

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

有可能有方法可以設置 gcc 編譯支持匿名結構體,但是魚鷹也不想深究,改了就是。

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

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 1
收藏 2
關注 160
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧
主站蜘蛛池模板: 连州市| 海丰县| 宜城市| 莒南县| 揭东县| 清流县| 分宜县| 共和县| 玛曲县| 琼结县| 陵水| 平阳县| 封丘县| 阳朔县| 永寿县| 聊城市| 广灵县| 原平市| 昭觉县| 邮箱| 弋阳县| 昆山市| 惠水县| 潮州市| 望谟县| 石阡县| 木里| 井陉县| 定州市| 西宁市| 古丈县| 安远县| 金山区| 元朗区| 吴川市| 和龙市| 昭苏县| 禄劝| 崇文区| 左权县| 平湖市|