我想输入一个执行按位计算的宏并交换两个变量
我没有在我的程序中一次又一次地输入该代码,而是决定使用宏作为
#define swapVars(p,a,b) {p=a^b;a=^p;b=^p;}
当我在代码中使用宏
时int a = 10, b=19;
int swap_dummy = 0; //May contain anything
swapVars(swap_dummy, a, b);
printf("a = %d | b = %d", a, b);
我在替换中遇到错误。宏定义错了吗? (顺便说一句,它应该是)。这种情况的正确宏是什么?
答案 0 :(得分:3)
=^
无效,您需要^=
。虽然目前还不清楚为什么你在正常分配工作正常时会使用逐位xor。
但是真的看到你的问题的评论,为什么这根本不应该是一个宏。
答案 1 :(得分:2)
这个问题很像“如何以错误的方式解决我的问题?”。
您的宏似乎是xor swap的错误实现。我将尝试以正确的方式帮助您解决问题,而不是帮助您修复xor交换:尽管xor-swapping是一个有趣的概念,但它没有实际用途。你确定这不是一个不成熟的优化吗?
int
值上使用xor可能会导致陷阱表示,例如负零。使用陷阱表示是未定义的行为。未定义的行为可能会导致程序以非常奇怪的方式发生故障。关于inline
关键字:提前停止优化。使用简单易读的代码使您的程序正常工作,以便您可以寻求我们的帮助。一旦有了可行的解决方案,必要时对其进行分析,以确定最重要的优化可能来自何处。