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