gpt4 book ai didi

c++在if block 中为函数范围定义变量

转载 作者:行者123 更新时间:2023-12-02 10:25:48 26 4
gpt4 key购买 nike

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

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

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 block 中定义的变量的范围仅限于相应的 if block 。任何人都可以提出更好的方法来处理这个问题吗?在这种情况下,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;
}
}
}

甚至更好,创建子功能
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();
}
}

关于c++在if block 中为函数范围定义变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26305859/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com