gcc 4.7.2
c89
函數宏只是文本替換,我知道有些程序員喜歡內聯函數。我想知道我所做的是否有任何問題。
只需注意兩點,我沒有使用do ... while(0)或大括號來包裝,因爲我會得到isdn_channel的非聲明錯誤。
#define ISDN_CHANNEL_GET(channel) \
module_isdn_channel_t *isdn_channel = NULL; \
isdn_channel = channel->base.imp->isdn_channels[channel->isdn_id]; \
if(!isdn_channel) { \
LOG(CRITICAL, "Failed to get channel data"); \
return FALSE; \
}
而且在我的源代碼,我用它這樣的,不加分號:
ISDN_CHANNEL_GET(channel)
isdn_channel->base.sync_answer |= SIP_CONNECTED;
一切工作正常,但我只是想檢查我剛剛進入寫這些功能像宏。
非常感謝您的任何建議,
有趣的事情會發生,當你寫1行'if'或'for'沒有'{}',並且宏是那一行。有一個'do {code} while(0)'成語來防止這種事情發生。 – nhahtdh 2013-03-26 11:05:20
你應該回到那個宏嗎?正如你所說,它是一個文本替代品,而不是一個功能。 – Daboyzuk 2013-03-26 11:05:22