#define SWAP(x, y, T) do { T temp##x##y = x; x = y; y = temp##x##y; } while (0)
我在C中看到了这个交换宏。
有人可以解释它是如何工作的以及temp##x##y
的使用吗?
答案 0 :(得分:1)
它将temp
与x
和y
连接起来,以帮助声明一个允许交换工作的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);
无效。