gpt4 book ai didi

c - "resettable"带有 C 宏的循环 DSL?

转载 作者:行者123 更新时间:2023-11-30 14:48:07 26 4
gpt4 key购买 nike

我希望循环运行一次,除非设置为重复,但我不喜欢必须在正常程序流程中显式设置变量的丑陋。

我正在使用这个,但项目维护者不喜欢它:

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 1 反复在 0 和 1 之间切换是完全没问题的,特别是在与硬件相关的代码中。 这是你想要做的吗? 但这不是你使用它的方式,所以它没有意义。另外,将它与有符号整型一起使用是有问题的。

请不要发明一些丑陋的宏语言,那要糟糕十倍!这是你能做的最糟糕的事情。

没有理由不能简单地按照以下方式做一些事情:

bool retry = true;
while(retry)
{
retry = false;
...
if(something_failed) retry = true;
}

关于c - "resettable"带有 C 宏的循环 DSL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50688488/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com