17

我刚刚在一些嵌入式代码中找到了这个函数定义:

float round_float_to_4(static float inputval);

我熟悉静态(全局变量、函数和局部变量)的其他用途,但这是我第一次将其视为函数参数的说明符。我假设这会强制编译器为inputval而不是堆栈使用固定的内存位置?

4

4 回答 4

12

这是非标准的。我猜和你一样,我对在具有嵌入式目标的编译器中的这种扩展并不感到惊讶。

于 2010-02-15T10:31:19.920 回答
6

那是无效的。static我知道的可以在函数参数中使用的唯一有效位置是数组维度

float round_float_to_4(float inputval[static 4]);

也就是说inputval,在对这个函数的所有调用中,都指向至少提供4浮点数的内存(这是 C99 的补充,它不会出现在 C89 中)。

于 2010-02-15T10:47:43.277 回答
3

根据 C 标准,

唯一应该出现在参数声明中的存储类说明符是寄存器。

于 2016-10-27T18:32:45.783 回答
1

许多嵌入式设备都有一个严重受限的堆栈,这样的功能对于减少堆栈溢出的机会非常有好处,同时仍然为您提供可重入代码的机会。

较小的芯片没有任何机会将变量放入堆栈,因此所有参数都是隐式内存位置。

于 2010-02-15T13:40:26.370 回答