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