do,whileマクロ

例えば、NULLチェックと解放&NULL代入をするマクロを作るときに、

#define SAFE_DELETE(p)       \
            if( p != NULL ){ \
                delete p;    \
                p = NULL;    \
            }

こうやって書くんですけど、これだとSAFE_DELETE(p)と書いたときに、最後のセミコロンが無かったとしても、コンパイルが通ってしまいます。


これは、次のようにdo,whileを使うことによって解決することが出来ます。

#define SAFE_DELETE(p)           \
            do{                  \
                if( p != NULL ){ \
                    delete p;    \
                    p = NULL;    \
                }                \
            }while( FALSE )


……まあ、これが出来たところで、それがどうしたと言われたらそれまでなんですが(;´Д`)