我执行了以下代码

# define swap(a,b) temp=a; a=b; b=temp;
#include<stdio.h>
#include<conio.h>
main( )
{
  int i, j, temp;
  i=5;
  j=10;
  temp=0;
  if( i > j)
    swap( i, j );
  printf( "%d %d %d", i, j, temp);
}

它给我输出为10 0 0
我的问题是,即使#define语句是if(i>j),为什么false宏也会执行?

最佳答案

在您的宏中添加大括号有助于确定代码范围。
当您编写不带花括号的宏时,它将以这种方式扩展。

    if( i > j)
{
      temp=a;
}
    a=b;
    b=temp;

但是,当您添加如下括号时:-
#define swap(a,b) {temp=a; a=b; b=temp;}

然后您的代码将按照您的期望执行

关于c++ - 我用宏执行了以下代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22015437/

10-10 17:31
查看更多