Статическое ключевое слово в параметре функции

Я только что нашел это определение функции в некотором встроенном коде:

float round_float_to_4(static float inputval);

Я знаком с другими приложениями для static (глобальные переменные, функции и локальные переменные), но это первый раз, когда я рассматриваю его как спецификатор для параметра функции. Я полагаю, что это вынуждает компилятор использовать фиксированную ячейку памяти для inputval вместо стека?

Ответы

Ответ 1

Это нестандартно. Я бы предположил то же, что и вы, и я не удивлен таким расширением в компиляторах, имеющих встроенную цель.

Ответ 2

Это недействительно. Единственное допустимое место, где static можно использовать в параметре функции, о котором я знаю, находится в размере массива

float round_float_to_4(float inputval[static 4]);

Говоря о том, что inputval во всех вызовах этой функции укажет на память, обеспечивающую по крайней мере 4 float (это дополнение C99, оно не отображается в C89).

Ответ 3

Согласно стандарту C,

Единственный спецификатор класса хранения, который должен иметь место в параметре Объявление - это регистр.

Ответ 4

Многие встроенные устройства имеют значительно ограниченный стек, такая функция будет иметь большую выгоду в снижении вероятности, но при этом дает вам возможность для повторного ввода кода.

Меньшие чипы не имеют возможности помещать переменные в стек, поэтому все параметры неявно размещаются в памяти.