__attribute__
読み:アンダースコア-アンダースコア-アトリビュート-アンダースコア-アンダースコア
外語:__attribute__

 GCCの拡張機能。関数、変数、型に対して属性を付加するために使われる。
目次

概要
 __attribute__に続けて、二重括弧でパラメーターを記述するのが特徴的な書式となっている。
 __attribute__ ((パラメーター))
 パラメーターには様々なものがあり、カンマ(,)で区切って複数の属性を指定するものもある。
 二重括弧でくくるのには理由が存在し、それはGCC以外では、マクロで無視できるようにするためである。複数の引数があっても、括弧でくくってあれば、マクロは一つの引数としてそれを扱うことができ、次のようにして無視することができる。
 #ifndef __GNUC__
 #define __attribute__(x)
 #endif
 また、関数などに対する__attribute__機能もさまざまあるが、関数属性は宣言時にのみ指定でき、関数の定義部では使えないので注意が必要である。

特徴
 一覧は、6 Extensions to the C Language Familyに記載されている。
 Common以外についてはアーキテクチャーごとに定義される。同名のものも多いが、アーキテクチャーによって書式などが異なることもある。多くはCPUのアーキテクチャーごとだが、OSによって定義されるものもある。
 また、Function AttributesとVariable Attributesは共通するものも多い。

一覧
 以下は、Common(共通)のほか、ARM、Microsoft Windows、x86アーキテクチャーで使われるもののみをリストアップする。
 なお、各オプションの名称は前後に__を付けることができる。

Function Attributes
 6.31 Declaring Attributes of Functionsに記載されているもの。

Common Function Attributes
alias(x)
aligned(x)
バイト整列の設定
alloc_align
alloc_size
always_inline
artificial
assume_aligned
bnd_instrument
bnd_legacy
cold
const
constructor
constructor(x)
destructor
destructor(x)
deprecated
deprecated(x)
error(x)
warning(x)
externally_visible
flatten
format (archetype, string-index, first-to-check)
printfなどの書式指定文字列と可変長引数群の整合性を、コンパイル時にチェックする機能
format_arg(x)
gnu_inline
hot
ifunc(x)
interrupt
interrupt_handler
leaf
malloc
no_icf
no_instrument_function
no_reorder
no_sanitize_address
no_address_safety_analysis
no_sanitize_thread
no_sanitize_undefined
no_split_stack
noclone
noinline
nonnull(x)
noreturn
externなどで呼び出す関数が、戻らないことを明示する
nothrow
noplt
optimize
pure
returns_nonnull
returns_twice
section(x)
オブジェクトを、指定したセクションxに配置する
sentinel
stack_protect
target(x)
unused
used
visibility(x)
warn_unused_result
weak
weakref
weakref(x)
lower
upper
either

ARM Function Attributes
interrupt
isr
long_call
short_call
naked
pcs
target(x)
'thumb' と 'arm' の強制切り替え

Microsoft Windows Function Attributes
dllexport
dllimport

x86 Function Attributes
cdecl
fastcall
thiscall
ms_abi
sysv_abi
callee_pop_aggregate_return(x)
ms_hook_prologue
regparm(x)
sseregparm
force_align_arg_pointer
stdcall
target(x)

その他
 以下アーキテクチャーにも独自の定義がある。

Variable Attributes
 6.32 Specifying Attributes of Variablesに記載されているもの。

Common Variable Attributes
aligned(x)
cleanup(x)
common
nocommon
deprecated
deprecated(x)
mode(x)
packed
詰め物を入れない
section(x)
オブジェクトを、指定したセクションxに配置する
tls_model(x)
unused
used
vector_size(x)
バイト単位で変数のベクトル長を定義する
weak

Microsoft Windows Variable Attributes
dllimport
dllexport
selectany
shared

x86 Variable Attributes
ms_struct
gcc_struct

その他
 以下アーキテクチャーにも独自の定義がある。

Type Attributes
 6.33 Specifying Attributes of Typesに記載されているもの。

Common Function Attributes
aligned(x)
bnd_variable_size
deprecated
deprecated(x)
designated_init
may_alias
char型と同様、他の種類のオブジェクトへの別名として定義される
packed
詰め物を入れない
transparent_union
unused
visibility

ARM Type Attributes
dllimport
notshared

x86 Type Attributes
ms_struct
gcc_struct

その他
 以下アーキテクチャーにも独自の定義がある。

Label Attributes
 6.34 Label Attributesに記載されているもの。
unused
hot
cold

Enumerator Attributes
 6.35 Enumerator Attributesに記載されているもの。
deprecated

sparse
 sparse(1)で使われているもの。

再検索