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