c ++在函数范围的块中定义变量

时间:2014-10-10 18:33:21

标签: c++ variables scope

背景:我正在为硬件开发几个不同的控制器(大约10个左右),这些硬件涉及在RTAI linux下实时运行代码。我已经为硬件实现了一个类,每个控制器作为该类的单独成员函数。我希望根据选择的控制器将相应控制变量的所需轨迹传递给这些控制功能中的每一个。此外,由于每个控制器有几个参数,我希望快速切换控制器而不必浏览整个代码和更改参数,我希望在一个地方定义所有控制变量并根据哪个控制器定义它们我选择跑。这是我正在寻找的最低工作示例。

我希望根据条件是否为真来定义变量,如下所示:C ++:

int foo()
{
  int i=0;

  if(i==0)
  {
    int a=0;
    float b=1;
    double c=10;
  }
  elseif(i==1)
  {
    int e=0;
    float f=1;
    double g=10;
  }

// Memory locked for hard real-time execution
// execute in hard real-time from here

  while(some condition) 
  {
// 100's of lines of code
    if(i==0)
    {
     a=a+1;
     b=b*2;
     c=c*4;
// 100's of lines of code
    }
    elseif(i==1)
    {
     e=e*e*e;
     f=f*3;
     g=g*10;
// 100's of lines of code
    }
// 100's of lines of code
  }   

// stop execution in hard real-time
}

上面的代码给出了执行错误,因为if块中定义的变量范围仅限于相应的if块。有谁能建议更好的方法来处理这个问题?在C ++中这个上下文中的最佳实践是什么?

1 个答案:

答案 0 :(得分:1)

在您的情况下,您可以简单地使用:

int foo()
{
    int i = 0;

    if (i == 0) {
        int a = 0;
        float b = 1;
        double c = 10;

        for(int j = 1; j < 10; j++) {
            a = a + 1;
            b = b * 2;
            c = c * 4;
        }
    } else if (i == 1) {
        int e = 0;
        float f = 1;
        double g = 10;
        for(int j = 1; j < 10; j++) {
            e = e * e * e;
            f = f * 3;
            g = g * 10;
        }
    }
}

甚至更好,创建子功能

void foo0()
{
    int a = 0;
    float b = 1;
    double c = 10;

    for(int j = 1; j < 10; j++) {
        a = a + 1;
        b = b * 2;
        c = c * 4;
    }
}

void foo1()
{
    //.. stuff with e, f, g
}

int foo()
{
    int i = 0;

    if (i == 0) {
        foo0();
    } else if (i == 1) {
        foo1();
    }
}