重复代码块的预处理器指令(带条件)

Preprocessor Directive for Repeated Code Blocks (with condition)

本文关键字:指令 条件 处理器 预处理 代码      更新时间:2023-10-16

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();
    }
}