gpt4 book ai didi

c - (有条件?)在函数中创建局部变量

转载 作者:行者123 更新时间:2023-11-30 14:37:30 28 4
gpt4 key购买 nike

我遇到了这个[问题]:How can I store values into a multi-parameter struct and pass typedef struct to a function? 。我建议在 if 之前声明一次 dtErrorMessage 变量,并将其用于两个条件,而不是声明两个不同的变量,如下所示:

// Initial version
if(GetTemperature() <= -20)
{
dtErrorMessage low;
low.errorCode=ERROR_CODE_UNDER_TEMP;
low.temperature=GetTemperature();
SendErrorReport(&low);
}

if(GetTemperature() >= 160)
{
dtErrorMessage high;
high.errorCode=ERROR_CODE_OVER_TEMP;
high.temperature=GetTemperature();
SendErrorReport(&high);
}


// My version
dtErrorMessage err;
int8_t temp = GetTemperature(); // Do not consider change during evaluation

if(temp <= -20)
{
err.errorCode = ERROR_CODE_UNDER_TEMP;
err.temperature = temp;
SendErrorReport(&err);
}
else if(temp >= 160)
{
err.errorCode = ERROR_CODE_OVER_TEMP;
err.temperature = temp ;
SendErrorReport(&err);
}
else
{
// Do not send error report
}

我的问题是:(在嵌入式方面)我对吗,这样无论条件如何,都会在 RAM 中创建两个局部变量?因此,它会在 if 之前使用一个无条件变量声明,然后将其用于两个条件,从而减少所需的 RAM,对吗?

我无法找到正确的术语来搜索以自行回答此问题。

最佳答案

具有自动存储持续时间的变量的生命周期是直到 block 结束为止。存储将得到保证,并且它将保留恒定地址(即由 & 给出的地址)直到 block 末尾,之后所有指向该对象的指针将变得不确定。

C 标准没有规定lowhigh 必须占用相同的内存部分!必须保证存储直到包含声明的 block 末尾,但也可以更长。另一方面,as-if 规则表示程序只需表现得就像是根据 C 标准规则为抽象机编译的程序一样,因此高质量的实现可能会如此

  • 不要在不同地址同时为lowhigh预留内存,
  • 不为 err 保留内存,以防采用 else 分支。

实际上使这两个的执行行为几乎相同。

差异主要在于风格上:在您的版本中,需要输入的内容较少,并且原始版本可以适应不良编译器。

关于c - (有条件?)在函数中创建局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57284257/

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