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アーキテクチャーで使われるもののみをリストアップする。
なお、各オプションの名称は前後に__を付けることができる。
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)
その他
以下アーキテクチャーにも独自の定義がある。
- ARC Function Attributes
- AVR Function Attributes
- Blackfin Function Attributes
- CR16 Function Attributes
- Epiphany Function Attributes
- H8/300 Function Attributes
- IA-64 Function Attributes
- M32C Function Attributes
- M32R/D Function Attributes
- m68k Function Attributes
- MCORE Function Attributes
- MeP Function Attributes
- MicroBlaze Function Attributes
- MIPS Function Attributes
- MSP430 Function Attributes
- NDS32 Function Attributes
- Nios II Function Attributes
- PowerPC Function Attributes
- RL78 Function Attributes
- RX Function Attributes
- S/390 Function Attributes
- SH Function Attributes
- SPU Function Attributes
- Symbian OS Function Attributes
- Visium Function Attributes
- Xstormy16 Function 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
その他
以下アーキテクチャーにも独自の定義がある。
- AVR Variable Attributes
- Blackfin Variable Attributes
- H8/300 Variable Attributes
- IA-64 Variable Attributes
- M32R/D Variable Attributes
- MeP Variable Attributes
- PowerPC Variable Attributes
- SPU Variable Attributes
- Xstormy16 Variable 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
その他
以下アーキテクチャーにも独自の定義がある。
- MeP Type Attributes
- PowerPC Type Attributes
- SPU Type Attributes
6.34 Label Attributesに記載されているもの。
- unused
- hot
- cold
6.35 Enumerator Attributesに記載されているもの。
- deprecated
sparse(1)で使われているもの。
- address_space
- bitwise
- force
- context(x,y,z)
関連する用語
GCC