Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;在函数范围的if块内定义变量_C++_Variables_Scope - Fatal编程技术网

C++ c++;在函数范围的if块内定义变量

C++ c++;在函数范围的if块内定义变量,c++,variables,scope,C++,Variables,Scope,背景:我正在为一个硬件开发几个不同的控制器(超过10个左右),这涉及到在RTAILinux下硬实时运行代码。我为硬件实现了一个类,每个控制器作为该类的一个单独成员函数。我希望根据选择的控制器,将各个控制变量的期望轨迹传递给每个控制函数。此外,由于每个控制器都有几个参数,我希望在不必浏览整个代码和更改参数的情况下快速切换控制器,因此我希望在一个位置定义所有控制变量,并根据我选择运行的控制器来定义它们。下面是我要寻找的最起码的工作示例 我希望在C++中根据条件是否为真来定义变量,如下所示: intf

背景:我正在为一个硬件开发几个不同的控制器(超过10个左右),这涉及到在RTAILinux下硬实时运行代码。我为硬件实现了一个类,每个控制器作为该类的一个单独成员函数。我希望根据选择的控制器,将各个控制变量的期望轨迹传递给每个控制函数。此外,由于每个控制器都有几个参数,我希望在不必浏览整个代码和更改参数的情况下快速切换控制器,因此我希望在一个位置定义所有控制变量,并根据我选择运行的控制器来定义它们。下面是我要寻找的最起码的工作示例

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

intfoo()
{
int i=0;
如果(i==0)
{
int a=0;
浮动b=1;
双c=10;
}
elseif(i==1)
{
int e=0;
浮点数f=1;
双g=10;
}
//内存已锁定,用于硬实时执行
//从这里以硬实时方式执行
虽然(某些条件)
{
//100行代码
如果(i==0)
{
a=a+1;
b=b*2;
c=c*4;
//100行代码
}
elseif(i==1)
{
e=e*e*e;
f=f*3;
g=g*10;
//100行代码
}
//100行代码
}   
//以硬实时方式停止执行
}

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

,在这里,你可以简单地使用:

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;
        }
    }
}
intfoo()
{
int i=0;
如果(i==0){
int a=0;
浮动b=1;
双c=10;
对于(int j=1;j<10;j++){
a=a+1;
b=b*2;
c=c*4;
}
}else如果(i==1){
int e=0;
浮点数f=1;
双g=10;
对于(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();
    }
}
void foo0()
{
int a=0;
浮动b=1;
双c=10;
对于(int j=1;j<10;j++){
a=a+1;
b=b*2;
c=c*4;
}
}
void foo1()
{
//…用e,f,g填充
}
int foo()
{
int i=0;
如果(i==0){
foo0();
}else如果(i==1){
foo1();
}
}

你需要阅读一本关于变量范围和生存期的C++ C++书。在使用之前声明变量。问题解决了。首先,您必须考虑为什么需要在if块中定义它们。您可以这样编写变量定义,但它们在下面的
}
中超出了范围,因此您无法编写使用变量的代码(因为它们未定义)。在任何情况下,您都试图将两个不同的函数体组合成一个函数。使用两个单独的功能,一个用于处理
a
b
c
,另一个用于处理
e
f
g
。如果必须,请保留当前函数以调用正确的其他函数。请查看更新的帖子。在for循环中有100行公共代码,如果创建两个不同的函数,则需要重复这些代码。此外,循环在RTAI Linux下以硬实时方式执行,因此调用更多函数将消耗开销,并会通过增加抖动降低硬实时性能。请查看更新的帖子。在for循环中有100行公共代码,如果创建两个不同的函数,则需要重复这些代码。此外,循环是以硬实时方式执行的,因此调用更多函数会增加开销,并会增加抖动,从而降低硬实时性能。编译器可能会内联函数(比我们更好),通过将大小写分组为子函数,可以避免循环中的
if else if
出现大量分支。