成人免费无码不卡毛片,亚洲AⅤ无码精品一区二区三区,国产尤物精品视频,久久精品日本亚洲,欧美成人一区三区无码乱码A片,中文字日产幕码一区二区色哟哟,亞洲日韓中文字幕網AV

  • 正文
  • 推薦器件
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

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

2024/09/09
972
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

來(lái)源:公眾號(hào)【魚(yú)鷹談單片機(jī)

作者:魚(yú)鷹Osprey

ID ??:emOsprey

匿名結(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 沒(méi)有名字。

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

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

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

簡(jiǎn)單一點(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),魚(yú)鷹以前的代碼基本使用匿名結(jié)構(gòu)體,麻煩就來(lái)了。

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

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

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

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

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
S6010VS2TP 1 Littelfuse Inc Silicon Controlled Rectifier, 10A I(T)RMS, 6400mA I(T), 600V V(DRM), 600V V(RRM), 1 Element, TO-251AA, ROHS COMPLIANT, PLASTIC, VPAK-3
$2.11 查看
BT137-600E 1 Inchange Semiconductor Company Ltd TRIAC
$0.54 查看
2-520183-2 1 TE Connectivity ULTRA-FAST 250 ASY REC 22-18 TPBR

ECAD模型

下載ECAD模型
$0.36 查看

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計(jì)資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫(xiě)文章/發(fā)需求
立即登錄
扶沟县| 定南县| 东兴市| 武宁县| 九龙坡区| 互助| 福建省| 武夷山市| 颍上县| 烟台市| 博白县| 成安县| 开封县| 峡江县| 沁阳市| 汨罗市| 梁平县| 无为县| 仙游县| 马关县| 如皋市| 北辰区| 囊谦县| 沁水县| 南陵县| 固始县| 泸定县| 镇坪县| 潢川县| 孝感市| 南漳县| 饶阳县| 临武县| 海晏县| 行唐县| 临邑县| 沧源| 海南省| 罗甸县| 三江| 东兴市|