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