gpt4 book ai didi

c++ - 用于中断或继续的 C/C++ 宏

转载 作者:太空宇宙 更新时间:2023-11-04 05:25:09 24 4
gpt4 key购买 nike

我正在尝试编写一个简单的宏,该宏基于在调用它的循环中调用 breakcontinue 的条件。下面是代码:

#include <iostream>

#define BC_IF_EVEN(BC) if(i % 2 == 0) BC

using namespace std;

int main() {
int i = 0;
while(i++ < 30) {
if(i < 15)
BC_IF_EVEN(continue);
else
BC_IF_EVEN(break);

cout << i << " ";
}
cout << endl;
}

我正在寻找的输出是:1 3 5 7 9 11 13 15,但是上面的代码输出:1 3 5 7 9 11 13 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 因为 main() 中的 else 条件应用于 if 中的条件BC_IF_EVEN 宏。

一个简单的修复是在 main() 中为 if 条件放置范围大括号,但我不想强制执行,因为应该允许用户编码以常规方式。

N.B. 我不能在宏中放置 do { .. } while(false) 循环(这是在条件语句中允许在宏调用后使用分号的标准技巧,因为通过 BC 发送的 breakcontinue 应用到这个内部循环。

有没有一种简单的方法可以在不修改 main() 函数的情况下获得所需的输出?

最佳答案

#define BC_IF_EVEN(BC) if (i % 2 != 0); else BC

但真的是为什么?

关于c++ - 用于中断或继续的 C/C++ 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32390487/

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