Ctags
Ctags（英: Ctags）はソース及びヘッダ内にある名前のインデックス（又はタグ）ファイルを生成するプログラム。様々なプログラミング言語に対応している。言語に依存するが、サブルーチン(関数)、変数、クラスのメンバ、マクロ等がインデックス化される。これらのタグによりテキストエディタなどのツールで高速かつ容易に定義を参照できる。相互参照ファイルを出力でき、また名前についての情報を人が読みやすい形で列挙した言語ファイルを生成することもできる。
CtagsはKen ArnoldがBSD Unix用に開発した。後にJim KlecknerによりFortranがサポートされ、ビル・ジョイによりPascalがサポートされた。
ctagsの派生版
ctagsにはいくつかの派生版が存在する。
Etags
EtagsはEmacs上で動作するctagsである。ctagsが生成するViフォーマットのタグファイル用にのみ意味のあるオプションはetagsでは解釈されず無視される。
Exuberant Ctags
Darren Hiebertが開発したExuberant Ctagsは元々Vimと共に配布されていたが、Vim 6のリリースに合わせて独立したプロジェクトになった。 Emacs互換機能をサポートしている。
Exuberant Ctagsは正規表現を用いることにより数多くのプログラミング言語に対応でき、30以上の言語に対応している。
タグファイルのフォーマット
複数のタグファイルフォーマットがある。その一部を以下で説明する。説明中の<\x##>は16進数でバイトを表している。
Ctagsフォーマット及びExuberant Ctagsフォーマット
オリジナルのctagsフォーマットとExuberant Ctagsフォーマットはファイルフォーマットが似ている。
Etagsフォーマット
Emacs用の etags のフォーマット。タグファイルは通常は TAGS という名前である。
etags のファイルは複数のセクションで構成されている。入力ソースファイル毎に1つのセクションを持つ。各セクションはプレーンなテキストファイルであるが、特別な制御用にアスキー外の文字を使用する。以下の説明においてこれらの文字は<>で囲まれた16進数のコードで表す。
セクションは2行のヘッダで始まる。1行目は<\x0c>一文字のみを含む。2行目は次のようになる。

{ソースファイル<},{タグ定義データのバイト数}
ヘッダの後にはタグの定義が続く。各定義毎に1行。フォーマットは以下の通り。

{タグ定義テキスト}<\x7f>{タグ名}<\x01>{行番号},{バイトオフセット}
タグ定義よりタグの名称が導き出せる場合は{タグ名} とその後ろの \x01 が無視される。
例
ソースコードとして次のような1行だけのtest.cを読み込ませた場合、
#define CCC(x)
TAGS ファイルは次のようになる。

<\x0c>
test.c,21
#define CCC(<\x7f>CCC<\x01>1,0