我执行了以下代码
# 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?
您需要将宏包装成花括号以使其工作:
#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,这是一个模板函数.你永远不会遇到模板功能的这类问题