2017-12-04 20 views
0

私は、このようなエラーの@@YAHXZ一部を理解したいと思います:"@@ YAHXZ"はVSリンクのエラー記述の意味は何ですか?

Error LNK2019 unresolved external symbol "int __cdecl func2(void)" ([email protected]@YAHXZ) referenced in function _main .

これはほんの一例ですが、私はちょうど今、それらを覚えていけない奇妙な手紙の他の種類を見てきました。それぞれの説明はどこで見つけることができますか?

+0

が鍵となります。https://docs.microsoft.com/en-私/ cpp /ビルド/参照/装飾名 –

+0

名前のmangling [ここ](https://stackoverflow.com/questions/1314743/what-is-name-mangling-and-how-does-it-work)について読むと[ここ](https://en.wikipedia.org/wiki/Name_mangling)。すべての実装には、コンパイラのフラグとすべてのコンパイラのバージョンによって変更できる、独自の名前の飾り付けスキームがあることに注意してください。 –

答えて

3

これは、「name mangling」または「名前の装飾」と呼ばれます。

C++では関数のオーバーロードがサポートされているため、シンボルの名前は特定の方法で生成されます。通常、引数の型に基づいています。

マイクロソフトは、名前の装飾についての完全なドキュメントを提供していません
https://msdn.microsoft.com/en-us/library/56h2zst2.aspx

EDIT:

ここでは、MicrosoftのWebサイト上の公式ドキュメントです。
あなたは記号の意味を正確に知ることに興味があるなら、私は呼び出し規約
Agner霧のマニュアルを読んでお勧めします。ここでは
http://www.agner.org/optimize/calling_conventions.pdf

+0

残念なことに、公式文書には実際に使用されたスキームは記載されていません。装飾された名前が何であるかを一般的に説明します。 [このソース](https://en.wikiversity.org/wiki/Visual_C%2B%2B_name_mangling)は、wikiであり、正確なバージョンを指定していませんが、より詳細に説明されています。 –

+0

@FrançoisAndrieux残念ながら、そうです。これに関する情報を提供するためのリンクを追加しました。 – Macmade

関連する問題