Вопрос

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

float round_float_to_4(static float inputval);

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

Это было полезно?

Решение

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

Другие советы

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

float round_float_to_4(float inputval[static 4]);

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top