2.2 リンカースコープ指定子
次の宣言指定子は、extern シンボルの宣言と定義を隠すのに役立ちます。これらの指示子を使うと、リンカースコープのマップファイルは使用しなくてすみます。また、コマンド行で –xldscope を指定して、変数スコープのデフォルト設定を制御することもできます。詳細は、-xldscope={v}を参照してください。
表 2-2 宣言指定子
|
|
__global
|
シンボルは大域リンカースコープを持ち、このリンカースコープはもっとも制限の少ないリンカースコープです。シンボルに対する参照はすべて、シンボルを定義する最初の動的モジュール内の定義に結合します。このリンカースコープは、 extern シンボルの現在のリンカースコープです。
|
__symbolic
|
シンボルはシンボリックリンカースコープを持ち、このリンカースコープは大域リンカースコープよりも制限されたリンカースコープです。リンクしている動的モジュール内のシンボルに対する参照はすべて、モジュール内に定義されたシンボルに結合します。モジュールの外側では、シンボルは大域と同じです。このリンカースコープはリンカーオプション -Bsymbolic に対応します。リンカーの詳細については、 ld(1) を参照してください。
|
__hidden
|
シンボルは隠蔽リンカースコープを持ちます。隠蔽リンカースコープは、シンボリックリンカースコープや大域リンカースコープよりも制限されたリンカースコープです。動的モジュール内の参照はすべて、そのモジュール内の定義に結合します。シンボルはモジュールの外側では認識されません。
|
|
オブジェクトまたは関数は、より制限された指示子で再宣言することはできますが、制限のよりゆるやかな指示子で再宣言することはできません。シンボルは一度定義したら、異なる指示子で宣言することはできません。
__global はもっとも制限の少ないスコープ、__symbolic はより制限されたスコープ、__hidden はもっとも制限の多いスコープです。