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...