Статическое ключевое слово в параметре функции - PullRequest
16 голосов
/ 15 февраля 2010

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

float round_float_to_4(static float inputval);

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

Ответы [ 4 ]

11 голосов
/ 15 февраля 2010

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

4 голосов
/ 15 февраля 2010

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

float round_float_to_4(float inputval[static 4]);

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

2 голосов
/ 27 октября 2016

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

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

1 голос
/ 15 февраля 2010

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

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

...