C のポインターが特定の型であるかどうかを確認するにはどうすればよいですか?

できません。

ポインターは単にアドレスを格納するだけで、そのアドレスの内容とは関係ありません。


「型を識別するために idnumber を構造体に入れないようにしています。」それを避けないでください。本当に型をチェックできるようにしたい場合は、すべての構造体の最初の要素として typeID を配置します。あなたの衝動は悪いものではありませんでした。


Gcc はランタイムのどこにも構造定義を配置しません。これは、標準ではできないことを意味します。

型情報を何に使用しているかによって異なります。 2 つの主要なアプリケーションは次のとおりです。

<オール>
  • デバッグまたは同様の実行時検査
  • データ構造のシリアライズとデシリアライズ
  • 最初のケースでは、多くの場合、コンパイラによって出力されたシンボルに格納され、実行可能ファイルに添付された情報が利用可能です (多くの環境で)。

    実装はプラットフォーム固有であり、多くの場合、この情報を出力するようにコンパイラに指示する必要があることを意味します。これを行うプログラムの一例は gdb です。これを有効にするには、ポインターを正しく入力する必要があります。

    シリアル化の場合、タイプには、提案するような値がタグ付けされることがよくあります。これらのタグは、メモリ内データと共に保存する必要はありません。これらは、出力ルーチンによって追加できます。