今、仕事でマクロをばしばし使っている。
inline関数はないし、関数呼び出しするといろいろとオーバーヘッドがかさむからだ。
直に書いてもいいけど、メンテナンスを考えるとマクロでやるか、という状況だと思っておくれ。
さて、関数マクロの場合、私はdo-whileで囲むことが多い。
習慣みたいなものだが、静的解析ツールにかけると「while内が固定なので変だ」みたいな警告が出てくる。#define MACRO_FUNC(x,y) \do { \
y = (x) * (x); \} while(0)
うーん、この書き方は市民権を得ていないのか・・・。
do-whileなしでも、括弧だけで十分という気もする。
薄れた記憶からすると、括弧だけでは対処できないパターンがあるのでこの文法が使われていたと思う。
なんだっけ・・・。最適化が絡んでいたような。
Google検索
ああ、if文で途切れるのね。
で、MACRO_FUNCが{}だけだと、if(xxx)
MACRO_FUNC(x,y);else
//to do
となり、if(xxx)
{y = x * x;};else
//to do
となってしまい、elseが浮いてしまうのだ。if(xxx) {
y = x * x;};else
// to do
でもまあ、コーディング規約で「必ず括弧で囲め」とやってるから、別にいいんだけどね。
コンパイルエラーになるから、動作がおかしい、ということにはならないし。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。