首先来看一个例子:

这个很平常,大家都会用,但如果是下面这样使用,可以吗

好,让我们来编译一下,看是什么情况。

再看一下,宏展开后是怎木样的! (宏展开:$: gcc -E -P tt.c > file, 过后打开file文件就会看见)

编译时 发现错误,重定义了 i 变量。这是为什么
因为定义的宏是在编译时就在调用处展开了,当两个宏定义FUN()在同一作用域中调用时,就会发生变量重定义了。
那么有什么方法可以使这种调用正确呢 请看下面:

经编译,没法现错误,为什么 我们再来看看展开后的宏:

没发生错误,是因为在这里产生了两个不同的变量,i1,i2,。