在以下声明中使用##运算符是什么?

时间:2015-03-13 18:37:16

标签: c

#define SWAP(x, y, T) do { T temp##x##y = x; x = y; y = temp##x##y; } while (0)

我在C中看到了这个交换宏。

有人可以解释它是如何工作的以及temp##x##y的使用吗?

1 个答案:

答案 0 :(得分:1)

它将tempxy连接起来,以帮助声明一个允许交换工作的T类型的变量。

您可以像这样使用

int a = 1;
int b = 2;

SWAP(a, b, int);

生成的代码将是

int a = 1;
int b = 2;

do {
    int tempab = a;
    a = b; 
    b = tempab;
} while (0);

它可以避免使用您所看到的传递变量的相同名称,因为假设您像这样定义宏

#define SWAP(x, y, T) do { T z = x; x = y; y = z; } while (0)

然后这个

int x = 1;
int z = 2;

SWAP(z, x, int);

无效。