使用和不使用的宏之间的差异...同时

时间:2012-12-21 15:41:36

标签: c

  

可能重复:
  Do-While and if-else statements in C/C++ macros

我有以下宏:

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

这些宏之间有什么区别?

2 个答案:

答案 0 :(得分:4)

自己想出这个可能会更令人满意。

提示:

if(y) FREE2(x);

答案 1 :(得分:4)

考虑以下示例

if (some_test) FREE2(x);

扩展为

if (some_test)
    free(x);
x = NULL; // happens regardless of value of some_test