在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

但我得到了以下错误:
错误:标记“=”之前需要表达式
我在哪里犯错误?

最佳答案

temporarytemporary2temporary3已定义,但尚未提供它们应扩展到的值,因此宏扩展的结果将如下所示
(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/

10-12 15:02