Oracle Solaris Studio 12.2: C ユーザーガイド

2.2 リンカースコープ指示子

次の宣言指示子を使用して、extern シンボルの宣言と定義を隠せます。これらの指示子を使うと、リンカースコープのマップファイルは使用しなくてすみます。また、コマンド行で -xldscope を指定して、変数スコープのデフォルト設定を制御することもできます。詳細については、「B.2.101 -xldscope={v}」 を参照してください。

表 2–2 宣言指示子

値  

意味  

__global

シンボルは大域リンカースコープを持ち、このリンカースコープはもっとも制限の少ないリンカースコープです。シンボルに対する参照はすべて、シンボルを定義する最初の動的モジュール内の定義に結合します。このリンカースコープは、extern シンボルの現在のリンカースコープです。

__symbolic

シンボルはシンボリックリンカースコープを持ち、このリンカースコープは大域リンカースコープよりも制限されたリンカースコープです。リンクしている動的モジュール内のシンボルに対する参照はすべて、モジュール内に定義されたシンボルに結合します。モジュールの外側では、シンボルは大域と同じです。このリンカースコープはリンカーオプション -Bsymbolic に対応します。リンカーの詳細については、「ld(1)」を参照してください。

__hidden

シンボルは隠蔽リンカースコープを持ち、隠蔽リンカースコープは、シンボリックリンカースコープや大域リンカースコープよりも制限されたリンカースコープです。動的モジュール内の参照はすべて、そのモジュール内の定義に結合します。シンボルはモジュールの外側では認識されません。

オブジェクトまたは関数は、より制限された指示子で再宣言することはできますが、制限のよりゆるやかな指示子で再宣言することはできません。シンボルは一度定義したら、異なる指示子で宣言することはできません。

__global はもっとも制限の少ないスコープです。__symbolic はより制限されたスコープです。__hidden はもっとも制限の多いスコープです。