問題タブ [function-pointers]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - C で関数ポインタを使用する場合の警告
これは実際には重要ではない質問ですが、ほとんどの場合、関数ポインターを使用してこの警告を受け取りますが、それでも自分で理由を理解できませんでした。次のプロトタイプを検討してください。
これまでのところ、1,000 行のコードをコンパイルしても、警告はゼロです。だから私は宣言を正しく書いたと仮定しています。しかし、ツリー ノードに格納されているデータは単純な構造体であるため、デストラクタとして free を渡してコードで呼び出します。
そして、これは私に"warning: passing argument 2 of 'tree_destroyLineage' from incompatible pointer type"
メッセージを受け取ります。私の最初の仮説は、コンパイラーがコンパイル時にPointer
とvoid *
が同じものであることを理解できなかったというものでした。そのため、呼び出しを「再渡す」関数ポインターとまったく同じタイプの別の関数を作成し、関数ポインターをfree()
変更してみました。 void *
Pointer の代わりに aを受け入れる宣言。どちらのアプローチでも、まったく同じ場所でまったく同じ警告が表示されました。
私は何を間違っていますか、どうすれば解決できますか?
python - Pythonのctypeと関数ポインタ
これは私の他の質問と関係がありますが、私は新しい質問でそれを尋ねるべきだと感じました。
基本的に、FLACはコールバックに関数ポインターを使用し、ctypesを使用してコールバックを実装するにはCFUNCTYPE
、それらのプロトタイプを作成してから、prototype()
関数を使用してそれらを作成します。
これに関する問題は、コールバック関数をそのように作成することを考えたということです(再作成した構造体は表示していません。FLAC__Frameは構造体です)。
私が抱えている問題は実装です。FLAC__Frameはプログラマーによってインスタンス化されることはなく、初期化関数と処理関数からのみ呼び出されます。コールバック関数を自分で作成する必要がありますが、彼の問題は、これをどのように行うかわからないことです。私がこれをどのように行うべきかを知っているなら、いくつかの助けをいただければ幸いです。
c++ - 間接参照せずに関数へのポインタを呼び出すにはどうすればよいですか?
Py++によって生成されたC++プログラムに奇妙なtypedefステートメントがあります。
私がこれまでに理解したことは、上記のtypedef statemntはそのタイプではないということです。私たちのほとんどは、
むしろ、intを引数として取り、doubleを返す関数へのポインタを宣言する方法です(プロトタイプと同じ)。だから私の質問は、関数のアドレスを引数として(逆参照せずに)関数へのポインタがどのように呼び出されるのかということです。これもプロトタイプとは一致しません。誰か説明してください!
php - メンバー関数を配列に代入して呼び出す方法
私は現在このようにやっていますが、適切な方法ではないようです:
関数を直接割り当てると警告が発生するため、次のようにする必要があります。
たとえば、文字列に入れますが、メンバー関数の場合はどうすればよいかわかりません。
次のバージョンは問題ありませんか?:
呼び出すときは、次のようにします。
language-agnostic - C# デリゲート、動的プロキシ、クロージャ、および関数ポインタの違いは何ですか?
メソッドまたは関数をデータとして渡す一般的なメソッドの便利な定義は次のとおりです。
- デリゲート
- 閉鎖
- 関数ポインタ
- 動的プロキシによる呼び出しと
- ファーストクラスの方法?
c++ - コンストラクタを指す関数ポインタを渡す方法は?
C++ でリフレクション メカニズムの実装に取り組んでいます。コード内のすべてのオブジェクトは、Class 型の静的メンバー データを含む Object (独自のジェネリック型) のサブクラスです。
静的なクラス メンバー データムを持つオブジェクトのサブクラスについては、そのサブクラスのコンストラクターへのポインターを使用して「作成」を初期化できるようにしたいと考えています。
c++ - 非静的メンバー関数への C++ 関数ポインター (クラス メンバー)
どうすればこれを機能させることができますか?
c - JMP または LCALL を使用せずに任意の関数を呼び出す最善の方法
組み込み C では、いくつかの固定/汎用アルゴリズムを使用することは非常に自然ですが、複数の実装が可能です。これは、いくつかの製品プレゼンテーション、オプションの場合もあれば、オプションの RAM、さまざまな IP セット MCU、アップグレードされた周波数など、製品ロードマップ戦略の一部に過ぎないことによるものです。
私のプロジェクトのほとんどでは、外部の状態評価、時間管理、メモリ ストレージなどを実装する実際の関数から、コア部分、アルゴリズム、およびロジック アーキテクチャを分離することによって、それに対処しています。
当然のことながら、私は C 関数ポインター メカニズムを使用し、それらのポインターに意味のある名前のセットを使用します。例えば
それは温度を int に格納し、戻り値は OKness です。
ここで、製品の特定の構成について、私が持っていると想像してください
TMP75 デバイスから I2C バス上の温度を読み取る関数と、
ADC によって読み取られるダイオードの電圧降下を読み取る関数。これは、非常に広範なストロークで温度を評価する方法です。
基本的な機能は同じですが、オプション セットの製品が異なります。
一部の構成では、ucEvalTemperature を ucReadI2C_TMP75 に設定しますが、他の構成では ucReadCh2_ADC を使用します。この軽度のケースでは、問題を回避するために、引数の型を int に変更する必要があります。ポインターは常に同じサイズですが、関数のシグネチャは同じサイズではなく、コンパイラーは文句を言うからです。わかりました... それは殺人者ではありません。
この問題は、異なる引数のセットが必要な関数で明らかになります。署名は決して正しくなく、コンパイラは Fpointers を解決できません。
だから、私は3つの方法があります:
- 引数のグローバル スタックを使用し、すべての関数は unsigned char Func(void); です。
- 各実装にヘルパー関数を使用して、make/call への適切な割り当てをオンに切り替えます。
- JMP / LCALL アセンブリ呼び出しを使用すると (もちろんこれは恐ろしいことです)、コール スタックで大きな問題が発生する可能性があります。
どちらもエレガントでもなければ、落ち着いてもいません...あなたのアプローチ/アドバイスは何ですか?