0

ここに初めて投稿

現在、組み込みデバイス用のコードを移植しています。基本的に、古い既存のプロプライエタリ コンパイラから新しいコンパイラ (AVR-GCC) ですべてを動作させる

私は構造体でこの奇妙に見える (とにかく私には!) 変数に出くわしました。括弧が何であるかわかりません。生の値に使用される構造体にあります。

float   (*tc)( float value );

私の IDE は、'float' のように、'value' をコンパイラ キーワードとして強調表示するので、これが AVR-GCC 固有のものかどうかわかりません。

これは、「reading」と呼ばれる float 引数を持つ関数で使用され、次を返そうとします。

    return (raw[rCN3].tc)( reading );

上記の行により、プログラムは実際に範囲外のメモリにアクセスしようとします。

このようなコードは見たことがないので、解読を手伝ってくれる人がいるかどうか疑問に思っていましたか? 古いコンパイラでは動作しましたが、AVR-GCC では問題が発生しています

前もって感謝します。アレックス

4

4 に答える 4

1

これは関数ポインタです。float 値を返し、float パラメーターを持つ関数を指します。

于 2013-05-29T10:26:45.257 に答える
0

それは関数ポインタ変数です。

tc関数へのポインターであり、float引数として 1 つを取り、`float を返します。

範囲外のメモリにアクセスする理由は、おそらくrCN3配列の範囲外であるためですraw

于 2013-05-29T10:26:08.027 に答える
0

それが関数ポインタです。

これはtc、単一のfloat引数を受け取り、値を返す関数のアドレスを保持することを意味しfloatます。

たとえば、次のように標準ライブラリのsinf関数に設定できます。

somestruct.tc = sinf;

somestruct.tc(3.14159265f / 2);  /* This will return roughly 1.0f. */

また、便利なcdeclには次のように書かれています。

float を返す関数 (float) へのポインターとして tc を宣言する

于 2013-05-29T10:26:15.163 に答える