第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在C語言中建立表達(dá)式時ASSERT表達(dá)式的方法

在C語言中建立表達(dá)式時ASSERT表達(dá)式的方法

C
UYOU 2019-12-25 14:12:04
我正在整理一些較舊的代碼,這些代碼到處都使用“魔術(shù)數(shù)字”來設(shè)置硬件寄存器,并且我想使用常量而不是這些數(shù)字來使代碼更具表現(xiàn)力(實際上,它們將映射到名稱/ values用于記錄寄存器)。但是,我擔(dān)心隨著更改量的增加,我可能會破壞魔術(shù)數(shù)字。這是一個簡化的示例(寄存器集更加復(fù)雜):const short mode0 = 0;const short mode1 = 1;const short mode2 = 2;const short state0 = 0;const short state1 = 4;const short state2 = 8;所以代替:set_register(5);我們有:set_register(state1|mode1);我正在尋找的是以下版本的構(gòu)建時間:ASSERT(5==(state1|mode1));更新資料@Christian,感謝您的快速響應(yīng),我也對C /非增強環(huán)境的答案感興趣,因為這是驅(qū)動程序/內(nèi)核代碼。
查看完整描述

3 回答

?
ITMISS

TA貢獻(xiàn)1871條經(jīng)驗 獲得超8個贊

Ralf Holly撰寫了一篇文章 ,探討了C中的靜態(tài)斷言的不同選項。


他提出了三種不同的方法:


開關(guān)盒的值必須唯一

數(shù)組不能為負(fù)數(shù)

除以零表示常量表達(dá)式

他得出最佳實現(xiàn)的結(jié)論是:


#define assert_static(e) \

    do { \

        enum { assert_static__ = 1/(e) }; \

    } while (0)


查看完整回答
反對 回復(fù) 2019-12-25
?
白衣非少年

TA貢獻(xiàn)1155條經(jīng)驗 獲得超0個贊

如果您無權(quán)訪問第三方庫的靜態(tài)斷言函數(shù)(如boost),則可以滾動自己的靜態(tài)斷言:


#define STATIC_ASSERT(x) \

    do { \

        const static char dummy[(x)?1:-1] = {0};\

    } while(0)

不利的一面是,錯誤消息當(dāng)然不會很有幫助,但至少會給您行號。


查看完整回答
反對 回復(fù) 2019-12-25
  • 3 回答
  • 0 關(guān)注
  • 635 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號