我想要一个循环运行一次,除非设置为重复,但我不喜欢必须明确设置变量作为正常程序流程的一部分的丑陋。
我使用这个,但项目维护者并不喜欢它:
int ok = 0;
while (ok^=1) {
// ...
if (something_failed) ok = 0;
}
(与while (!ok) { ok = 1; // ...
比较)
好处是你可以将它们包装在宏中:
#define RETRY(x) while (x^=1)
#define FAIL(x) x = 0
并将其用作
int ok = 0;
RETRY(ok) {
// ...
if (something_failed) FAIL(ok);
}
如何在没有奇怪的xor-assign的情况下使这些宏工作?
答案 0 :(得分:1)
使用XOR 1在0和1之间重复切换是非常好的,特别是在与硬件相关的代码中。 这是你想要做的吗?但这不是你如何使用它,所以它没有意义。另外,将它与signed int一起使用是值得怀疑的。
请不要发明一些丑陋的宏语言,这要差10倍!这是你能做的最糟糕的事情。
没有理由不能简单地做一些事情:
bool retry = true;
while(retry)
{
retry = false;
...
if(something_failed) retry = true;
}