【发布时间】:2018-12-07 03:27:20
【问题描述】:
考虑以下函数
int16_t read_input(void)
{
static int32_t previous_input = read_encoder(); // <--Not a compile time constant
//Read current_input
if (previous_input - current_input > SOME_THRESHLD)
some_action();
previous_input = current_input;
//some more code + return statement
}
由于变量未初始化为编译时常量,我无法在没有错误的情况下声明它。我想将变量保留为函数内的静态变量有两个原因
1) 该变量未在程序的其他任何地方使用。所以没有必要将其保留为全局变量
2) 前一个函数需要初始化为当前输入,否则在初始运行期间,由于编码器连接到当前输入,当前输入与前一个输入之间的差异可能会变得非常高(并且无法确定在哪里可能是编码器值,这取决于用户在关闭它之前旋转了多少)。这会造成其他功能的误触发。
有没有办法在函数内声明一个静态变量并将其初始化为类似于上面给出的示例的值?
注意:这个问题是复杂程序的一部分,我已对其进行了简化以避免复杂性。如果问题有任何歧义,请告诉我
【问题讨论】:
-
我不清楚为什么静态在这里很重要。
-
除了克雷格的好答案之外,您还可以将
previous_input初始化为read_encoder永远不会返回的值。例如,如果read_encoder返回一个介于 0 和 1023 之间的数字,则将previous_input初始化为 -1 允许代码检测到之前没有输入。 -
@DaveNewton:- 我使用 previous_input 的唯一位置是 read_input 函数内部,它需要在函数调用之间保留值