在C 函数中使用几个示波器块

On using several scoped blocks in a C++ function

本文关键字:几个 示波器 函数      更新时间:2023-10-16

我开始越来越吸引使用连续的示波器块编写长C 算法函数,如下:

void my_algorithm(const MyStruct1 &iparam1, MyStruct2 &oparam2)
{
    // First block
    MyStruct3 intermediate_var3;
    {
        double temporary_var;
        // Functional step 1.1
        // Functional step 1.2
        intermediate_var3 = ...
    }
    // Second block
    MyStruct4 intermediate_var4;
    {
        double temporary_var;
        // Functional step 2.1
        // Functional step 2.2
        intermediate_var4 = ...
    }
    // Final block
    {
        int temporary_var;
        oparam2 = ...
    }
}

我开始认为这是阐明功能结构并限制临时变量范围的好方法(例如ijk等)。我看到这样的范围块在C函数中有意义以启用新声明(请参阅为什么将C代码包装在Curly Braces中?)。

在C 的背景下,这是好是坏练习吗?

这是一个明确的标志,您应该将此单独的块提取到单独的功能中。

MyStruct3 DoSth3(params)
{
    double temporary_var;
    // Functional step 1.1
    // Functional step 1.2
    return ...
}
MyStruct4 DoSth4(params)
{
    double temporary_var;
    // Functional step 2.1
    // Functional step 2.2
    intermediate_var4 = ...
}
void my_algorithm(const MyStruct1 &iparam1, MyStruct2 &oparam2)
{
    // First block
    MyStruct3 intermediate_var3 = DoSth3(params);
    // Second block
    MyStruct4 intermediate_var4 = DoSth4(params);
    int temporary_var;
    oparam2 = ...
}

可能会发生,您会担心DoSth3DoSth4公开,因为它们应该在my_algorithm 的上下文中是私有的。在这种情况下,您可以通过以下方式解决它:

class my_algorithm
{
private:
    static MyStruct3 DoSth3(params);
    static MyStruct4 DoSth4(params);
public:
    static void Perform(const MyStruct1 &iparam1, MyStruct2 &oparam2);
};