函数参数中的静态关键字
我刚刚在一些嵌入式代码中找到了这个函数定义:
float round_float_to_4(static float inputval);
我熟悉静态 (全局变量,函数和局部变量)的其他用法,但这是我第一次将其视为函数参数的说明符。 我假设这迫使编译器使用固定内存位置的inputval而不是堆栈?
这是非标准的。 我猜你也一样,对于有嵌入式目标的编译器中的这种扩展我并不感到惊讶。
那是无效的。 可以在我知道的函数参数中使用static
的唯一有效位置是数组维度
float round_float_to_4(float inputval[static 4]);
假设inputval
将在对此函数的所有调用中指向提供至少4
浮点数的内存(这是C99添加,它不会出现在C89中)。
按照C标准,
在参数声明中出现的唯一存储类说明符是寄存器。
许多嵌入式设备的堆栈非常有限,这样的function对于降低堆栈溢出的可能性非常有益,同时仍然为您提供重入代码的机会。
较小的芯片没有任何机会将变量放在堆栈上,因此所有参数都是隐式存储位置。