11

C17 标准ATOMIC_VAR_INIT从弃用stdatomic.h,这意味着它仍然支持它,但宁愿不使用它。在 C17 中初始化原子的正确非弃用方式是什么?

与非原子类型相同:

atomic_int foo = 42;

还是新事物?

4

2 回答 2

8

C17 允许使用通常的显式初始化来初始化原子:

atomic_int n = 42;

C17 从字面上看只是从 7.17.2.1 的句子中删除了“使用 ATOMIC_VAR_INIT”这两个词。

于 2018-05-02T20:22:53.790 回答
1

根据该文档的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 */

要将变量置于已知状态,您必须使用staticatomic_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 */

但这是我能找到的唯一信息。

于 2018-04-27T09:38:12.827 回答