1

重複の可能性:
C/C++ マクロの Do-While および if-else ステートメント

次のマクロがあります。

#define FREE1(x) do { free(x); x = NULL; } while (0)
#define FREE2(x) free(x); x = NULL

これらのマクロの違いは何ですか?

4

2 に答える 2

4

これは自分で調べた方が満足できるかもしれません。

ヒント:

if(y) FREE2(x);
于 2012-12-21T15:43:56.097 に答える
4

次の例を考えてみましょう

if (some_test) FREE2(x);

に展開します

if (some_test)
    free(x);
x = NULL; // happens regardless of value of some_test
于 2012-12-21T15:44:04.293 に答える