この質問は、特定の実装で void ポインターを使用することの妥当性に関するものです。
無限ループで構成される比較的単純なプログラムがあります。各ループで、プログラムは定数値の固定範囲を反復処理し、各値に対して関数を呼び出します。呼び出される特定の関数は、使用可能な 3 つの関数のいずれかであり、実行時に引数によって指定されます。無限ループが始まる前に、指定された引数に基づいて関数への関数ポインターを設定する条件ブロックがあります。このように、条件ロジックは、すべてのループのすべての反復ではなく、1 回だけ実行する必要があります。
これは私が実装したもので、うまく機能しますが、関数の呼び出しごとに状態を維持したいと考えています。私の提案は、状態を構造体に格納し、各値で関数を呼び出すときにその構造体を渡すことです。問題は、各関数がその状態の異なる値のセットを格納するために異なる構造体を必要とし、3 つの関数すべてのプロトタイプが (関数ポインターに関して) 互換性がなければならないことです。3 つの関数のプロトタイプで void ポインターを使用してこれを解決し、互換性のあるプロトタイプを維持しながら、各関数に異なる構造体を渡すことができるようにします。
質問は; 私の提案は void ポインターの適切な使用ですか、それとも実行時のダイナミズムが多すぎるので、アプローチを再考する必要がありますか?
注: 3 つの関数のそれぞれで静的変数を使用することはできません。構造体も無限ループで使用できる必要があるためです。これは、値の範囲が繰り返される前後に何らかの処理を行う必要があるためです。