重复代码块的预处理器指令(带条件)
Preprocessor Directive for Repeated Code Blocks (with condition)
C++有什么方法可以实现像下面的伪代码这样的概念吗?
#pragma REPEAT
for (;;)
{
// code block #1
#pragma REPEAT_CONDITION(a==1)
// code
#end_pragma
// code block #2
}
#end_pragma
这将被编译为这样的东西:
if (a == 1)
{
for (;;)
{
// code block #1
// code
// code block #2
}
}
else
{
for (;;)
{
// code block #1
// code block #2
}
}
这里的目标是通过从内部循环中抽象条件来生成一段易于阅读的性能代码。因此不必手动维护重复的代码块。
老实说,预处理器应该用于条件编译,现在很少有其他用途。通过内联(建议)函数,疯狂地优化编译器和枚举,它们最常见的用例已经逐渐减少。
我假设您不想每次通过循环都检查条件,即使这会大大清理您的代码:
for (;;) {
// code block #1
if (a == 1) {
// code
}
// code block #2
}
我能想到你这样做的唯一原因是为了不多次检查的额外速度,但你可能想实际检查它的影响。除非// code
简单得可怜,否则它很可能会淹没单个条件语句的效果。
如果出于某种原因确实需要单独的循环,则最好将这些公共代码块放入函数中,并简单地使用单行代码调用它们:
if (a == 1) {
for (;;) {
callCodeBlock1();
// code
callCodeBlock2();
} else {
for (;;) {
callCodeBlock1();
callCodeBlock2();
}
}
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 在没有太多条件句的情况下,我如何避免被零除
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 基于多个条件处理地图中的所有元素
- 条件constexpr函数
- 无论条件是否为true,if总是在c++中执行
- C++:对不存在的命名空间使用命名空间指令
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 基于模板值的条件变量
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 函数名是c中该函数的第一条指令的地址吗
- 将按位if条件转换为普通if条件
- 条件断点在不应该触发时触发
- 为什么简单的算术减法在"if"条件下不起作用?
- 指令高速缓存和条件语句
- c++ 条件包含指令中是否允许命名空间
- 汇编器消息:错误:拇指条件指令应该在 IT 块中 - "strexeq r1,r2,[r4]"
- while条件不工作时中的预处理器指令
- 重复代码块的预处理器指令(带条件)