__attribute__
読み:アンダースコア-アンダースコア-アトリビュート-アンダースコア-アンダースコア
外語:__attribute__
GCC
の拡張機能。関数、変数、型に対して属性を付加するために使われる。
目次
概要
特徴
一覧
Function Attributes
Common Function Attributes
ARM Function Attributes
Microsoft Windows Function Attributes
x86 Function Attributes
その他
Variable Attributes
Common Variable Attributes
Microsoft Windows Variable Attributes
x86 Variable Attributes
その他
Type Attributes
Common Function Attributes
ARM Type Attributes
x86 Type Attributes
その他
Label Attributes
Enumerator Attributes
sparse
概要
__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)
その他
以下アーキテクチャーにも独自の定義がある。
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
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
その他
以下アーキテクチャーにも独自の定義がある。
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
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
その他
以下アーキテクチャーにも独自の定義がある。
MeP Type Attributes
PowerPC Type Attributes
SPU Type Attributes
Label Attributes
6.34 Label Attributes
に記載されているもの。
unused
hot
cold
Enumerator Attributes
6.35 Enumerator Attributes
に記載されているもの。
deprecated
sparse
sparse(1)で使われているもの。
address_space
bitwise
force
context(x,y,z)
再検索