以下は、解析と索引付けについて説明している CDT ページからの抜粋です ( CDT/designs/Overview of Parsing )。違いが何であり、高速インデクサーが失敗する可能性がある場所についてのかなり良い説明を提供します。
解析とバインドの解決は遅いプロセスです。ユーザーはコンテンツ アシストなどのコード編集機能が高速であることを期待しているため、これは問題です。このため、CDT はバインディング情報を「インデックス」または「PDOM」(Persisted Document Object Model) と呼ばれるディスク上のキャッシュに保存し、ユーザーの要求にすばやく応答する機能を提供できるようにします。
インデックスの構築には、プロジェクト内のすべてのコードの解析、すべてのバインディングの解決、それらのバインディングのインデックスへの書き込みが含まれます。その後、ユーザーがファイルを編集するたびに、インデックスが増分的に更新されます。
古いバージョンの CDT では、高速インデックス作成、完全インデックス作成、およびインデックス作成なしの 3 つの異なるインデックス作成モードがサポートされています。大規模なプロジェクトのインデックス作成は時間のかかるプロセスになる可能性があるため、既定の設定は高速インデクサーです。高速インデクサーと完全インデクサーの違いは、高速インデクサーは既に一度解析されたヘッダー ファイルをスキップするのに対し、完全インデクサーはヘッダー ファイルが含まれるたびに常に再解析することです。ただし、完全なインデクサーは、その名前にもかかわらず、まだ完全に正確ではないことを理解することが重要です。
ヘッダー ファイルがソース ファイルにインクルードされると、その時点で定義されているすべてのマクロが適用されます。一部のライブラリ ヘッダーは、ヘッダー ファイルを部分的にインクルードするために、プリプロセッサ条件 (#ifdefs) と組み合わせてマクロを使用します。このようなヘッダー ファイルがプロジェクトに複数回インクルードされることがあります。ヘッダーが依存するマクロが、ヘッダーがインクルードされるたびに異なる場合、ヘッダーのさまざまな部分がさまざまなソース ファイルにインクルードされる可能性があります。このシナリオでは、どちらのインデクサーも正確ではありません。これは、ヘッダーが最初に検出されたときにのみインデックスを作成するためです。
フル インデクサーは、既に検出されたヘッダーを再解析しますが、再インデックスは行いません。したがって、ヘッダーを含むソース ファイルはより正確に解析される可能性がありますが、ヘッダー自体は 1 回だけインデックス化されます。完全なインデクサーは、余分な解析が行われるため、高速インデクサーよりもはるかに遅くなりますが、わずかに正確になるだけです。このため、フル インデクサーは推奨されておらず、現在のバージョンの CDT から削除されています。
各プロジェクトには、関連付けられた 1 つの PDOM があります。PDOM はフラット バイナリ ファイルとしてディスクに保存されます。インデクサーは、ソース ファイルに含まれるヘッダーのみをインデックス付けするため、.c または .cpp ファイルに含まれていない .h ファイルがプロジェクトにある場合、通常はインデックス付けされません。ただし、プロジェクト内のすべてのファイルをインデックス化するための設定があります。