注
この属性は、ARM コンパイラでサポートされている GNU コンパイラの拡張機能です。
構文
__attribute__((visibility("visibility_type
")))
visibility_type
は、以下のいずれかになります。
-
デフォルト
-
シンボルに想定される可視性は他のオプションによって変更される場合があります。default の可視性は、このような変更よりも優先されます。default の可視性は、外部リンケージに対応します。
-
hidden
-
シンボルはダイナミックシンボルテーブルには配置されません。そのため、他の実行可能ファイルや共有ライブラリが直接参照することはできません。関数ポインタを使用した間接参照は可能です。
-
internal
-
プロセッサ固有のアプリケーションバイナリインタフェース(psABI)で別途指定されない限り、internal の可視性とは、関数が決して他のモジュールから呼び出されないことを意味します。
-
protected
-
シンボルはダイナミックシンボルテーブルに配置されますが、それを定義しているモジュール内の参照は、ローカルシンボルにバインドされます。つまり、このシンボルが別のモジュールによってオーバーライドされることはありません。
使用法
この属性は、default
の可視性を指定する場合を除き、暗黙的に外部リンケージが割り当てられるような宣言での使用が想定されています。
この属性を C および C++ の関数と変数に適用できます。C++ では、
クラス
、
構造体
、
共用体
、および
列挙
型、および
ネームスペース
宣言に適用することもできます。
例
int i __attribute__((visibility("hidden")));