C標準庫的閱讀(1)

2021-08-03 13:12:15 字數 728 閱讀 2061

c標準庫的閱讀(1)

assert.h

1,基本內容

assert.h 裡面提供了乙個巨集 assert(exp) 這個巨集指向另乙個巨集 ndebug 如果你在include標頭檔案之前,定義了這個巨集 ,那麼 assert(exp) 的定義就是 ((void)0) 意思是什麼也不做,相當與關閉斷言的功能,如果你沒有定義這個巨集,相當與開啟了斷言的功能。

2,裡面的原始碼

/* ndebug not defined */

void _assert(char *);

#define _str(x) _val(x)

#define _val(x) #x

#define assert(test) (test) ? (void)0

: _assert(__file__ ":" _str(__line__) " " #test)

/* in xassert.c */

#include

#include

void _assert(char *msg)

_val(x) #x 代表在x的兩邊加上」 將它字串化

那麼為什麼要、

_str(x) _val(x)

_val(x) #x

因為 x 可能是乙個巨集,所以val這個巨集可能只會把巨集的名字給替換成字串,而不是將巨集的內容給替換了。

這就是我看這個原始碼裡面不太懂的地方了

C 標準庫高階1

一 容器的選擇 一般情況下,最容易想到也最常用的就是vector,但是如果要是頻繁在容器物件的中間刪除和插入元素,就要考慮使用list,因為list是基於節點的容器,當頻繁在容器中間刪除和插入元素時,不需要將很多元素整體向前或者向後移動,只需要操作節點元素指標指向的位置,效率較高且不會導致迭代器失效...

《C 標準程式庫》 1

這個關鍵字原則上只對建構函式起作用,抑制陰性轉換,例如 class string 如果此時呼叫 string s1 20 成功申請20個大小長度的字串 string s2 20 同上string s3 a 本意是要把a賦值給s3,結果是 申請了a字元對應大小的字串 此時原函式宣告變成 class s...

C 標準模板庫STL運用(1)

參考胡凡 演算法筆記 p191 208 主要是vector set string的內容 是在code block 17.12上跑的 include include include include include using namespace std int main vi.pop back vec...