C C 知識點整理四

2021-09-12 18:45:42 字數 1222 閱讀 2831

斷言,是巨集,而非函式。assert 巨集的原型定義在(c)、(c++)中,其作用是如果它的條件返回錯誤,則終止程式執行。可以通過定義ndebug來關閉 assert,但是需要在源**的開頭,include之前。

使用assert的缺點是,頻繁的呼叫會極大的影響程式的效能,增加額外的開銷。

在函式開始處檢驗傳入引數的合法性;

每個assert只檢驗乙個條件,因為同時檢驗多個條件時,如果斷言失敗,無法直觀的判斷是哪個條件失敗;

不能使用改變環境的語句,因為assert只在debug個生效,如果這麼做,會使用程式在真正執行時遇到問題,錯誤: assert(i++ < 100);

assert和後面的語句應空一行,以形成邏輯和視覺上的一致感;

有的地方,assert不能代替條件過濾;

#include #include using namespace std;

int main()

cout《輸出結果:412

bit mode: 2; // mode 佔 2 位

類可以將其(非靜態)資料成員定義為位域(bit-field),在乙個位域中含有一定數量的二進位制位。當乙個程式需要向其他程式或硬體裝置傳遞二進位制資料時,通常會用到位域。位域的作用主要是節省記憶體資源,使資料結構更緊湊。

乙個位域必須儲存在同乙個位元組中,不能跨兩個位元組,故位域的長度不能大於乙個位元組的長度。如乙個位元組所剩空間不夠存放另一位域時,應從下一單元起存放該位域。也可以有意使某位域從下一單元開始。例如:

struct bitfield

;

取位址操作符&不能應用在位域字段上;

位域字段不能是類的靜態成員;

位域字段在記憶體中的位置是按照從低位向高位的順序放置的;

struct bitfield

; union union

; union union ubf;

ubf.n = 0; //初始化;

ubf.bf.a = 0; //二進位制為: 000

ubf.bf.b = 0; //二進位制為: 000

ubf.bf.c = 1; //二進位制為: 001

printf("ubf.bf.n = %u\n", ubf.n);

關於assert()、sizeof()、位域的定義參考部落格:

linux c c 知識點整理 四

當實際長度不夠時,右對齊 如果字串或者整數的長度超過說明的場寬,則按其實際長度輸出 如果是浮點數,若整數部分超過了說明的整數字場寬,則按其實際長度輸出,若是小數部分超過了說明的小數字場寬,則按說明的寬度以四捨五入輸出。例如 printf d d d n a,b,c b,c 那麼將輸出才c,b,c這3...

Oracle知識點整理(四)

oracle知識點整理 四 前言日期關鍵字 sysdate systimestamp 日期函式 to date to char last day add months months between next day least greatest 日期得計算 日期rr注意點 空值null 預設值插入n...

C C 基礎知識點整理

1.includeusing namespace std int main cout aa 0 1 endl cout aa 1 endl cout aa 0 endl cout aa 1 endl return 0 2.某二叉樹的後序遍歷和中序遍歷是一樣的都為abcdef,那麼它按層輸出的結果為 ...