複数行のマクロをコードのどこにでも安全に含めるには、do while(0) ループで囲む必要があることがわかっています。
たとえば、これは 100% 安全です。
#define swap( a , b ) \
do \
{ \
int t = a ; \
a = b ; \
b = t ; \
} \
while(0)
ループ外のコードの一部を含むマクロを使用することも安全かどうか、そうでない場合は、どのような状況で問題が発生する可能性があるかを知りたいです。
#define swap( a , b ) \
int t ; \ //should be in the same scope where the macro was called and before the loop
do \
{ \
t = a ; \
a = b ; \
b = t ; \
} \
while(0)
これを達成するための安全な方法はありますか、何を変更する必要があるか、安全でない場合はどのルールに従う必要がありますか。