- 優點:
- block 區塊, 可以在其內宣告變數, 在像 C89需要將變數定義在最上方這方面大有幫助
- 以 do...while(0) 取代 goto, 將 goto 後的東西放 while外面, 裡面用 break來達到 goto的效果
- 程式碼易讀且效能並沒損失
- 避免 marco 沒有加 {}, 又接在 if() 單行執行內容有分號的 case
- e.g.
#define swap(x, y) int temp; temp = x; x = y; y = temp;
if(x > y) swap(x, y);- Reference:宏定义中使用do{}while(0)的好处
2017年12月28日 星期四
[C++] do...while(0)
2017年12月27日 星期三
[C++] Coding convention - prefix k and What
- trace Android code時, 常會看到如下的 code
enum { kWhatSetDataSource = '=DaS', kWhatPrepare = 'prep', kWhatSetVideoSurface = '=VSu', kWhatSetAudioSink = '=AuS', kWhatMoreDataQueued = 'more', kWhatConfigPlayback = 'cfPB', ...- 這個 k代表什麼意思呢? => konstant, 因為 c的 prefix 已經被 char 用掉了, 用了 Germany的 konstant, 至於全大寫與 Hungarian notation 就不在這戰了
- 至於 What, 則猜測這些 enum 主要是用來在 message中傳遞, 對應 message.what 的 int值, 所以在 handler中常會看到自行定義的 enum 用 kWhat當 prefix
- 節錄 Android doc Message.what
-
what int what User-defined message code so that the recipient can identify what this message is about.
Each Handler has its own name-space for message codes,
so you do not need to worry about yours conflicting with other handlers.
[Android] DISALLOW_EVIL_CONSTRUCTORS
- 簡單的 macro, 用來避免未實作的 copy constructor 跟 assignment constructor 被 compiler實作
- Code
#define DISALLOW_EVIL_CONSTRUCTORS(name) \
name(const name &); \
name &operator=(const name &) /* NOLINT */
- Sample: ABuffer.h
struct ABuffer : public RefBase { explicit ABuffer(size_t capacity); ABuffer(void *data, size_t capacity); ... private: DISALLOW_EVIL_CONSTRUCTORS(ABuffer);- Reference:
[Android] Media Player
- State Diagram
- fixme later: 補 initialized/prepared/stopped 的 state diagram
- stagefright/NuPlayer
- fundamental design
- ALooper/AMessage/AHandler
- Interface
- content source/demuxer/decoder/render (driver)
- Reference:
2017年12月25日 星期一
2017年12月14日 星期四
[C Programming] strong v.s. weak symbols
- weak symbol 可以不用 definition
- strong symbol 可以取代 weak symbol
- 預設皆為 strong
- 用法: __attribute __((weak)) or #pragma weak
- 用 nm tool 來看 symbol table
2017年12月9日 星期六
2017年12月8日 星期五
[Android] Nougut with Raspberry Pi
- sync code
- platform: android
- Q & A:
- sync size 太大 (不確定整個 size 是多少? 看起來應該不少於 45GB)
- 可以用以下指令抓取
repo sync -c --no-tags --no-clone-bundle
- 其中最主要是 -c: 只抓目前 branch
- 更多細節可以查看
repo help sync
- Ref:
- Reference:
訂閱:
文章 (Atom)