在C语言中,我想创建这样一个宏函数,将第一个参数的内容放入第二个参数,将第二个参数的内容放入第三个参数,将第三个参数的内容放入第一个参数下面的代码不使用宏:
void circ2 ( int *a, int *b, int *c ){
int temp1;
int temp2;
int temp3;
temp1 = *a;
temp2 = *b;
temp3 = *c;
*a = temp3;
*b = temp1;
*c = temp2;
//printf( "%d\n%d\n%d\n", a, b, c );
}
int main(){
int x;
int y;
int z;
x = 1;
y = 2;
z = 3;
//circ(a, b, c);
circ(x, y, z);
printf( "%d\n%d\n%d\n", x, y, z );
return 0;
}
以及我试图创建的宏函数:
#define temporary
#define temporary2
#define temporary3
#define circ(x, y, z) (x != y && x != z && y != z) ? temporary = x, temporary2 = y, temporary3 = z, y = temporary, z = temporary2, x = temporary3 : x, y, z
但我得到了以下错误:
错误:标记“=”之前需要表达式
我在哪里犯错误?
最佳答案
temporary
、temporary2
和temporary3
已定义,但尚未提供它们应扩展到的值,因此宏扩展的结果将如下所示(x != y && x != z && y != z) ? = x, = y, = z
(等)
如果知道宏参数的类型为int
,则可以将宏扩展为代码块,如下所示:
#include <stdio.h>
#define circ(x,y,z) {int tmp=z; z=y; y=x; x=tmp; }
int main()
{
int a=1, b=2, c=3;
circ(a,b,c);
printf("a=%d, b=%d, c=%d\n",a,b,c);
}
输出:
a=3,b=1,c=2
关于c - 通过宏函数进行循环置换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28005764/