Ответ 1
Это нестандартно. Я бы предположил то же, что и вы, и я не удивлен таким расширением в компиляторах, имеющих встроенную цель.
Я только что нашел это определение функции в некотором встроенном коде:
float round_float_to_4(static float inputval);
Я знаком с другими приложениями для static (глобальные переменные, функции и локальные переменные), но это первый раз, когда я рассматриваю его как спецификатор для параметра функции. Я полагаю, что это вынуждает компилятор использовать фиксированную ячейку памяти для inputval вместо стека?
Это нестандартно. Я бы предположил то же, что и вы, и я не удивлен таким расширением в компиляторах, имеющих встроенную цель.
Это недействительно. Единственное допустимое место, где static
можно использовать в параметре функции, о котором я знаю, находится в размере массива
float round_float_to_4(float inputval[static 4]);
Говоря о том, что inputval
во всех вызовах этой функции укажет на память, обеспечивающую по крайней мере 4
float (это дополнение C99, оно не отображается в C89).
Согласно стандарту C,
Единственный спецификатор класса хранения, который должен иметь место в параметре Объявление - это регистр.
Многие встроенные устройства имеют значительно ограниченный стек, такая функция будет иметь большую выгоду в снижении вероятности, но при этом дает вам возможность для повторного ввода кода.
Меньшие чипы не имеют возможности помещать переменные в стек, поэтому все параметры неявно размещаются в памяти.