我用宏执行了以下代码

use*_*767 1 c c++ macros

我执行了以下代码

# 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);
}
Run Code Online (Sandbox Code Playgroud)

它给了我输出 10 0 0

我的问题是为什么#define宏甚至在if(i>j)声明之后才被执行false

spi*_*orm 6

您需要将宏包装成花括号以使其工作:

#define swap(a,b) {temp=a; a=b; b=temp;}
Run Code Online (Sandbox Code Playgroud)

您的宏扩展为以下内容

if( i > j)
  temp=a; 
a=b; 
b=temp;
Run Code Online (Sandbox Code Playgroud)

正确的解决方案是使用std :: swap,这是一个模板函数.你永远不会遇到模板功能的这类问题