函数参数中的静态关键字

Jos*_*sip 16 c static function parameter-passing

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

float round_float_to_4(static float inputval);
Run Code Online (Sandbox Code Playgroud)

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

APr*_*mer 11

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

  • 你是对的.我检查了编译器(Microchip C18)手册,发现:"功能参数可以有自动或静态存储类.自动参数放在软件堆栈上,可以重入.静态参数是全局分配的,可以直接访问通常较小的码." (3认同)

Joh*_*itb 5

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

float round_float_to_4(float inputval[static 4]);
Run Code Online (Sandbox Code Playgroud)

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