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

猫王还活着

我遇到了这个 [问题]:如何将值存储到多参数结构中并将 typedef 结构传递给函数?. 我建议在 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,然后将其用于两个条件,对吗?

我找不到正确的术语来搜索自己回答这个问题。

安蒂·哈帕拉

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

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

  • 不保留存储器两者lowhigh同时在不同的地址,
  • err如果else分支被采用,则不保留内存

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

不同之处主要在于文体:在您的版本中键入的内容较少,而原始版本适用于糟糕的编译器。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

swift允许没有条件/循环的代码块减小局部变量范围吗?

来自分类Dev

在 R 中按组有条件地创建变量(写入函数)

来自分类Dev

使用dplyr mutate函数根据当前行有条件地创建新变量

来自分类Dev

我有一个在创建矩阵的函数中未使用的局部变量

来自分类Dev

面板数据:创建具有条件的新变量

来自分类Dev

在lua中更改带有全局函数的局部变量

来自分类Dev

如何有条件地附加到 Makefile 函数中的变量?

来自分类Dev

静态局部变量中的竞争条件

来自分类Dev

静态局部变量中的竞争条件

来自分类Dev

MySQL中的存储过程带有条件变量

来自分类Dev

有条件地在python代码中添加变量

来自分类Dev

有条件地在R中创建列

来自分类Dev

在SAS中创建带有条件的子表

来自分类Dev

在Hive中创建局部变量

来自分类Dev

Python修改函数中的局部变量

来自分类Dev

全局函数中的局部变量

来自分类Dev

Python修改函数中的局部变量

来自分类Dev

递归函数中返回的局部变量

来自分类Dev

有条件的constexpr变量

来自分类Dev

当函数具有同义局部变量时,如何在函数中获取全局变量?

来自分类Dev

播放:有条件的JSON创建

来自分类Dev

有条件的春豆创建

来自分类Dev

Rails渲染有条件的局部

来自分类Dev

从构造函数内部-有条件地调用成员变量的构造函数重载

来自分类Dev

如何在主函数内部创建局部变量?

来自分类Dev

内联函数中的变量可以与局部变量冲突吗?

来自分类Dev

访问函数局部变量

来自分类Dev

在xpath中没有条件

来自分类Dev

有条件的地方在codeigniter中