C++ 最佳实践:变量、函数和Arduino?

C++ 最佳实践:变量、函数和Arduino?,c++,arduino,C++,Arduino,我正在使用Sublime和Arduino对气压计(MS5611)进行编程。但是,存储仅用作特定函数内临时存储的变量的最佳做法是什么: 1) 在我的头文件中为所有使用的变量创建私有变量 2) 在使用变量的函数中创建变量 什么需要最大的处理能力和内存使用率?(1)将它们作为私有变量创建一次,并使用函数更改内容,或(2)每次调用函数时都创建变量?取决于采样率,这意味着调用函数保存数据的次数? 在任何情况下,在收集和处理数据后,还必须考虑内存的清空程度,在任何情况下,如果没有太多变量,但必须处理更多可以

我正在使用Sublime和Arduino对气压计(MS5611)进行编程。但是,存储仅用作特定函数内临时存储的变量的最佳做法是什么:

1) 在我的头文件中为所有使用的变量创建私有变量

2) 在使用变量的函数中创建变量


什么需要最大的处理能力和内存使用率?(1)将它们作为私有变量创建一次,并使用函数更改内容,或(2)每次调用函数时都创建变量?

取决于采样率,这意味着调用函数保存数据的次数? 在任何情况下,在收集和处理数据后,还必须考虑内存的清空程度,在任何情况下,如果没有太多变量,但必须处理更多可以使用的函数,最好全局设置它们。
至少,我在我的项目中是这样做的,我从来没有遇到过问题。

总是在函数中声明它们。这提高了可读性,因为它显示了声明背后的意图。此外,它还降低了出错的机会

尽可能使用“const”,例如

几乎出于同样的原因,但这也为编译器提供了更多的优化选项


是否以及如何分配变量取决于编译器及其优化器。除非您有非常严格的性能约束,否则编译器将比您优化得更好。实际上,使用全局变量有时会降低代码的速度。当然,您可能会避免分配。但是,您将按照额外的存储说明付款。另一方面,“分配”可能会得到优化,然后全局变量代码会比局部变量代码慢。

您应该避免使用全局变量,因为它们是从可用堆RAM分配的,并且在程序期间存在(占用空间)(永远在嵌入式系统中)Globals也使得程序的可维护性和脆弱性降低


如果您只需要函数中的数据,请在那里声明它。几乎没有任何惩罚(仅限初始化),当函数作为局部变量返回并作为传递的参数放置在堆栈上时,使用的空间将自动返回。

如果您的函数仅在单个函数中使用,则在函数中将其定义为局部变量。函数使用的堆栈空间将增加,但这只是函数执行时的临时空间,添加额外的堆栈空间不会影响性能。这正是关键所在。大多数“变量”实际上是其范围内的常量。所以它们应该被声明为常量。这允许编译器进行重大优化。我同意这样一个事实,即您应该
const
任何不改变的变量,并立即用确定的值对其进行初始化,但在您的示例中,您的常量将随时间而改变(每次调用函数时),这是禁止的:)不,这不是禁止的。它按照预期编译和运行。const只是声明它在函数范围内是常量。无论何时调用该函数,都会重新初始化常量。回到Udo。常量的作用域是方法体。更多提示如下:
uint16_t sample_it() {
    const uint16_t sample = analogRead(...);
    const uint16_t result = do_somehting(sample);
    return result;
}