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

时间:2014-04-02 02:08:57

标签: c++ performance c-preprocessor

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
     }
}

这里的目标是通过从内循环中抽象出一个条件来生成易于阅读的性能代码。因此,不必手动维护重复的代码块。

1 个答案:

答案 0 :(得分:0)

老实说,预处理器应该用于条件编译,现在很少用。借助内联(-suggesting)函数,疯狂地优化编译器和枚举,它们最常见的用例已逐渐消失。

我在这里假设您不希望每次循环检查条件,即使这会大大清理您的代码:

for (;;) {
    // code block #1
    if (a == 1) {
        // code
    }
    // code block #2
}

我能想到你这样做的唯一原因是为了不多次进行检查的额外速度,但你可能想要检查它所带来的影响。除非// code非常简单,否则它很可能会破坏单个条件语句的效果。

如果出于某种原因需要单独的循环,那么最好将这些公共代码块放入函数中并简单地用一行代码调用它们:

if (a == 1) {
    for (;;) {
        callCodeBlock1();
        // code
        callCodeBlock2();
} else {
    for (;;) {
        callCodeBlock1();
        callCodeBlock2();
    }
}