名前空間
変種
操作

ATOMIC_VAR_INIT

From cppreference.com
< C‎ | atomic
ヘッダ<stdatomic.h>で定義
#define ATOMIC_VAR_INIT(value) /* 未指定 */
(C11 以降)
(C17 で非推奨)
(C23 で削除済み)

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

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

アトミック変数を初期化する際、アトミック操作を介したものであっても、あらゆる並行アクセスはデータ競合です (アドレスがすぐに別のスレッドに memory_order_relaxed 操作とともに渡された場合に発生する可能性があります)。

目次

[編集] 注釈

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

[編集] 不具合報告

以下の動作変更を伴う欠陥報告が、以前に発行されたC規格に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
DR 485 C11 仕様は冗長であり、コア言語と矛盾していました。 fixed

[編集] 参考文献

  • 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++ ドキュメント (ATOMIC_VAR_INIT)
English 日本語 中文(简体) 中文(繁體)