次の宣言指定子を、外部シンボルの宣言や定義の制約のために使用します。静的なアーカイブやオブジェクトファイルに対して指定したスコープは、共有ライブラリや実行可能ファイルにリンクされるまで、適用されません。しかしながら、コンパイラは、与えられたリンカースコープ指定子に応じたいくつかの最適化を行うことができます。
これらの指定子を使用することで、リンカースコープのためにマップファイルを使う必要がなくなります。 -xldscope をコマンド行で指定することによって、変数スコープのデフォルト設定を制御することもできます。
詳細は、「A.2.133 -xldscope={v}」を参照してください。
表 4–1 リンカースコープ宣言指定子
より限定的な指定子を使ってシンボル定義を宣言しなおすことはできますが、より限定的でない指定子を使って宣言しなおすことはできません。いったん定義したシンボルを別の指定子によって宣言することはできません。
__global はもっとも限定的でないスコープ、__symbolic はそれよりも限定的なスコープであり、__hidden はもっとも限定的なスコープです。
仮想関数の宣言は仮想テーブルの構造と解釈に影響を及ぼすので、あらゆる仮想関数は、クラス定義を含んでいるあらゆるコンパイル単位から認識される必要があります。
C++ クラスでは、仮想テーブルや実行時型情報といった暗黙の情報の生成が必要と なることがあるため、 構造体、クラス、および共用体の宣言と定義にリンカースコープ指定子を適用できるようになっています。その場合、指定子は、構造体、クラス、または共用体キーワードの直後に置きます。こういったアプリケーションでは、すべての暗黙のメンバーに対して 1 つのリンカースコーピングが適用されます。