C17 要我如何初始化我的原子?
How does C17 want me to initialize my atomics?
C17 标准从 stdatomic.h
弃用 ATOMIC_VAR_INIT
,这意味着它仍然支持它,但宁愿不使用它。在 C17 中初始化原子的正确非弃用方法是什么?
与非原子类型相同:
atomic_int foo = 42;
还是新的东西?
基于that document,第DR 454节,使用宏无法知道变量处于哪个状态。
atomic_int guide1 = ATOMIC_VAR_INIT(42); /* known value(42); WHAT STATE? */
但使用正常分配也未定,如下所示。
atomic_int guide2; /* indeterminate value; indeterminate state */
atomic_int guide3 = 42; /* known value(42); indeterminate state */
要将您的变量置于已知状态,您必须使用 static
或 atomic_init
函数。
static atomic_int guide4; /* known value(0); valid state */
static atomic_int guide5 = 42; /* known value(42); valid state */
atomic_int guide6;
atomic_init(&guide6, 42); /* known value(42); initialized state */
但这是我能找到的唯一信息。
C17 可以使用通常的显式初始化来初始化原子:
atomic_int n = 42;
C17 只是从 7.17.2.1.
的句子中删除了 "using ATOMIC_VAR_INIT" 这两个词
C17 标准从 stdatomic.h
弃用 ATOMIC_VAR_INIT
,这意味着它仍然支持它,但宁愿不使用它。在 C17 中初始化原子的正确非弃用方法是什么?
与非原子类型相同:
atomic_int foo = 42;
还是新的东西?
基于that document,第DR 454节,使用宏无法知道变量处于哪个状态。
atomic_int guide1 = ATOMIC_VAR_INIT(42); /* known value(42); WHAT STATE? */
但使用正常分配也未定,如下所示。
atomic_int guide2; /* indeterminate value; indeterminate state */
atomic_int guide3 = 42; /* known value(42); indeterminate state */
要将您的变量置于已知状态,您必须使用 static
或 atomic_init
函数。
static atomic_int guide4; /* known value(0); valid state */
static atomic_int guide5 = 42; /* known value(42); valid state */
atomic_int guide6;
atomic_init(&guide6, 42); /* known value(42); initialized state */
但这是我能找到的唯一信息。
C17 可以使用通常的显式初始化来初始化原子:
atomic_int n = 42;
C17 只是从 7.17.2.1.
的句子中删除了 "using ATOMIC_VAR_INIT" 这两个词