gcc 4.7.2
c89
こんにちは、
関数のようなマクロはテキスト置換にすぎません。一部のプログラマーはインライン関数を好むことを知っています。私がやったことに何か問題があるのだろうかと思います。
注意すべき点がいくつかありますが、isdn_channelに対して宣言されていないエラーが発生するため、do ... while(0)または中括弧を使用してラップしていません。
#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;
すべて問題なく動作しますが、これらの関数のようなマクロを書き始めたばかりなので、確認したいと思います。
提案をありがとう、