今、仕事でマクロをばしばし使っている。
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 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。