__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)

その他

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

  • 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)
関連する用語
GCC

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club