インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

グローバルシンボルと可視属性 (Linux* および macOS*)

このトピックは、Linux* および macOS* 向けの C/C++ アプリケーションにのみ適用されます。

グローバルシンボルは、宣言されたコンパイル単位 (単一ソースファイルとそのインクルード・ファイル) 外で見ることができるシンボルです。C/C++ では、 static キーワードのないファイルレベルでの宣言を意味します。次に例を示します。

int x = 5;        // グローバルデータの定義
extern int y;     // グローバルデータの参照
int five()        // グローバル関数の定義
  { return 5; } 
extern int four(); // グローバル関数の参照

最終的なプログラムは、メインプログラムとメインプログラムによって参照されるデータおよび関数の定義を含む複数の共有可能なオブジェクト・ファイル (.so) から構成されます。 共有可能なオブジェクトは、他の共有可能なオブジェクトで定義されているデータや関数を参照することもあります。同時に実行している複数のプロセスの仮想メモリーに共有可能なオブジェクトがマップされている場合、物理メモリーにはそのオブジェクトの読み取り専用部分が 1 つだけ存在するため、これらのオブジェクトは共有可能なオブジェクトと呼ばれます。メイン・プログラム・ファイルとそのファイルが参照する共有可能なオブジェクトを、プログラムのコンポーネントと呼びます。

コンパイル単位中の各グローバルシンボル定義や参照には、それらが定義されているコンポーネント以外からの参照方法を制御する可視属性があります。可視属性の値は 5 つあります。

通常、スタティックなローカルシンボル (C/C++ では、ファイルスコープで宣言されているシンボル、またはキーワード static とともに宣言されているシンボル) の可視属性は HIDDEN です。ほかのコンポーネント (または同じコンポーネント内のほかのコンパイル単位) から直接参照することはできませんが、間接的に参照することはできます。

可視属性は定義にも参照にも適用されます。シンボル参照の可視属性は、対応する定義にその可視属性が適用されることを意味します。