17

いくつかの埋め込みコードでこの関数定義を見つけました:

float round_float_to_4(static float inputval);

staticの他の使用法 (グローバル変数、関数、およびローカル変数) には精通していますが、関数パラメーターの指定子としてこれを見たのはこれが初めてです。これにより、コンパイラはスタックではなくinputvalに固定メモリ位置を使用するようになると思いますか?

4

4 に答える 4

12

これは非標準です。私はあなたと同じことを推測しますが、ターゲットが埋め込まれたコンパイラでそのような拡張が行われることに驚かないでください。

于 2010-02-15T10:31:19.920 に答える
6

それは無効です。static私が知っている関数パラメーターで使用できる唯一の有効な場所は、配列次元です。

float round_float_to_4(float inputval[static 4]);

inputvalこれは、この関数へのすべての呼び出しで、少なくともfloatを提供するメモリを指すと言います4(これはC99の追加であり、C89には表示されません)。

于 2010-02-15T10:47:43.277 に答える
1

多くの組み込みデバイスでは、スタックが大幅に制限されています。このような機能は、再入可能なコードの機会を提供しながら、スタック オーバーフローの可能性を減らすのに非常に役立ちます。

より小さなチップでは変数をスタックに置く機会がないため、すべてのパラメータは暗黙的にメモリ位置になります。

于 2010-02-15T13:40:26.370 に答える