2010-02-15 80 views
16

我刚刚发现这个函数定义在一些嵌入式代码:Static关键字

float round_float_to_4(static float inputval); 

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

+0

海合会我得到'错误:参数x'指定存储类。 – kennytm 2010-02-15 10:33:14

回答

11

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

+3

你说得对。我检查了编译器(Microchip C18)手册,发现:“函数参数可以具有自动或静态存储类型,自动参数放置在软件堆栈中,允许重入。静态参数在全局分配,允许直接访问码。” – Josip 2010-02-15 11:14:50

4

这是无效的。其中static可以在功能参数我所知道的被使用的唯一有效的地方是在一个阵列尺寸

float round_float_to_4(float inputval[static 4]); 

话说inputval会,在这个函数的所有调用,指向内存提供至少4花车(这是C99的补充,它没有出现在C89中)。

+1

@KennyTM,是的,它表示参数声明等同于'int * const y':因此它改变了顶级限定。然而,'4'在没有'静态'的情况下,这次没有真正的意义。 – 2010-02-15 11:07:05

1

许多嵌入式设备的堆栈严重受限,这样的功能在减少堆栈溢出的机会方面具有很大的好处,同时仍为您提供重入代码的机会。

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

2

按照C标准,

The only storage-class specifier that shall occur in a parameter declaration is register.

相关问题