IT用語集 › プログラミング › 名前修飾(ネームマングリング)

名前修飾(ネームマングリング)

プログラミング Svenska → 更新: 2026-10-21

リンカーは平らな名前しか理解しないため、コンパイラーが名前空間・クラス・引数の型・修飾子といったシグネチャ全体を一つのシンボル名に符号化すること。

オーバーロードを可能にする仕組みで、f(int) と f(double) は別のシンボルになり共存できる。日常では二つの帰結が大きい。第一に、符号化の規則はコンパイラー固有でバイナリインターフェースの一部であるため、互換性のないコンパイラーのオブジェクトファイルは結合できない。libstdc++で文字列型が分かれたときに、シンボルが見つからないという不可解なエラーが何年も続いたのはこのためだ。第二に、extern "C" は修飾を無効にして素の名前を出す。C から呼ぶ場合や、実行時に動的に探す場合に必須である。c++filt や nm -C で元に戻せるので、リンカーエラーはこれで読む。

← 用語集に戻る