公司筆電自從某次 windows 10 更新後 CPU 使用率一直高居不下,然後風扇就一直轉吵死人,每次一開會拔掉電源就撐不了多久實在很惱人。本來開工作管理員一直看到 windows event log 想說可能是 windows 本身不知道幹了啥事就先不理他,結果過了一周完全沒改善只好去查原因,花了一個多小時才終於查到問題點 = =
2019年3月28日
2019年3月26日
[C] Variadic Macro
有時候會有個需求是像這樣:
- 希望在執行任何 function / expression 前可以先做檢查,檢查過了才真的執行
- 能把上述的檢查包成容易使用的形式,讓後續使用的人不會忘記
#define CHECK_AND_USE(x, ...) if (x) { x(...); }
typedef void (*f1ptr)(int);
typedef void (*f2ptr)(double, const char*);
f1ptr p1 = NULL;
f2ptr p2 = NULL;
CHECK_AND_USE(p1, 2) // equivalent to if (p1) { p1(2); }
CHECK_AND_USE(p2, 1.0, "test") // equivalent to if (p2) { p2(1.0, "test"); }
這樣基本上只要記得都透過 CHECK_AND_USE 就能避免用 pointer 前忘記先做 null check。重點來了:CHECK_AND_USE 中的 ... 該怎麼辦呢?顯然的,我們需要不定數量與型態的參數。而能達到這件事情的有幾個方式,這邊要介紹的是 C99 開始支援的 Variadic Macro。
訂閱:
文章 (Atom)