Namespaces
Variants

ATOMIC_VAR_INIT

From cppreference.net
ヘッダで定義 <stdatomic.h>
#define ATOMIC_VAR_INIT(value) /* unspecified */
(C11で追加)
(C17で非推奨)
(C23で削除)

value と同じ型のアトミック変数を初期化するために使用できる式に展開されます。

自動ストレージ期間を持つアトミックオブジェクトの明示的に初期化されない初期値は不定です。ただし、静的変数とスレッドローカル変数のデフォルト(ゼロ)初期化は有効な値を生成します。

アトミック変数を初期化する際、同時アクセス(たとえアトミック操作を通じたものであっても)はデータ競合となります(これは、アドレスが即座に別のスレッドに渡され、 memory_order_relaxed 操作が行われる場合に発生する可能性があります)。

目次

注記

このマクロはC11アトミック型の初期草案設計の一部でした。C11では不要となり、C17では非推奨となり、C23では削除されました。

不具合報告

以下の動作変更に関する不具合報告は、以前に公開されたC規格に対して遡及的に適用されました。

DR 適用対象 公開時の仕様 正しい仕様
DR 485 C11 仕様が冗長で基本言語仕様と矛盾していた 修正済み

参考文献

  • C17規格 (ISO/IEC 9899:2018):
  • 7.17.2.1 ATOMIC_VAR_INITマクロ (p: 201)
  • C11規格 (ISO/IEC 9899:2011):
  • 7.17.2.1 ATOMIC_VAR_INITマクロ (p: 274)

関連項目

新しい atomic_flag を初期化する
(マクロ定数)
C++ documentation for ATOMIC_VAR_INIT