函数参数中的静态关键字

时间:2010-02-15 10:20:05

标签: c static function parameter-passing

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

float round_float_to_4(static float inputval);

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

4 个答案:

答案 0 :(得分:11)

这是非标准的。我猜你也是一样,我对编译嵌入式目标的扩展并不感到惊讶。

答案 1 :(得分:4)

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

float round_float_to_4(float inputval[static 4]);

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

答案 2 :(得分:2)

根据C标准,

  

唯一存在于参数中的存储类说明符   声明是注册。

答案 3 :(得分:1)

许多嵌入式设备的堆栈严重受限,这样的功能对于降低堆栈溢出的可能性非常有利,同时仍然为您提供重入代码的机会。

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