C からリンクする際の C シンボルの扱いとは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > C からリンクする際の C シンボルの扱いの意味・解説 

C++からリンクする際の C シンボルの扱い

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/11/26 23:58 UTC 版)

名前修飾」の記事における「C++からリンクする際の C シンボルの扱い」の解説

次のようなよくあるC++の例 #ifdef __cplusplus extern "C" {#endif /* ... */#ifdef __cplusplus}#endif は、引き続くシンボル修飾しないことを指示する。すなわち、コンパイラあたかもCコンパイラあるかのように、修飾なしの名前を用いたバイナリを吐く。Cが名前修飾利用していないので、C++コンパイラもそれらの識別子参照する名前修飾避けなければならない。 例として、標準的な文字列ライブラリ は、通常次のようなコードを含む: #ifdef __cplusplusextern "C" {#endifvoid *memset (void *, int, size_t);char *strcat (char *, const char *);int strcmp (const char *, const char *);char *strcpy (char *, const char *);#ifdef __cplusplus}#endif そこで、次のコード if (strcmp(argv[1], "-x") == 0) strcpy(a, argv[2]);else memset(a, 0, sizeof(a)); は、正しい、修飾されない strcmp 及び memset用いることになる。extern用いられなければC++コンパイラ同等次のコード生成するだろう if (__1cGstrcmp6Fpkc1_i_(argv[1], "-x") == 0) __1cGstrcpy6Fpcpkc_0_(a, argv[2]); else __1cGmemset6FpviI_0_(a, 0, sizeof(a)); これらのシンボルはCのランタイムライブラリ例えlibc)には存在しないので、リンカエラー報告することになる。

※この「C++からリンクする際の C シンボルの扱い」の解説は、「名前修飾」の解説の一部です。
「C++からリンクする際の C シンボルの扱い」を含む「名前修飾」の記事については、「名前修飾」の概要を参照ください。

ウィキペディア小見出し辞書の「C からリンクする際の C シンボルの扱い」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「C からリンクする際の C シンボルの扱い」の関連用語

C からリンクする際の C シンボルの扱いのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



C からリンクする際の C シンボルの扱いのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaの名前修飾 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS