C17希望我如何初始化原子?

C17希望我如何初始化原子?,c,atomic,c17,C,Atomic,C17,C17标准从stdatomic.h中弃用了ATOMIC\u VAR\u INIT,这意味着它仍然支持它,但宁愿不使用它。在C17中初始化原子的正确方法是什么 与非原子类型相同: atomic_int foo = 42; 还是新的?基于DR 454节,使用宏无法知道变量处于哪个状态 atomic_int guide1 = ATOMIC_VAR_INIT(42); /* known value(42); WHAT STATE? */ 但使用正常赋值也是不确定的,如下所示 atomic_int g

C17标准从
stdatomic.h
中弃用了
ATOMIC\u VAR\u INIT
,这意味着它仍然支持它,但宁愿不使用它。在C17中初始化原子的正确方法是什么

与非原子类型相同:

atomic_int foo = 42;
还是新的?

基于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_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标准的信息。你是指C++吗?看看相应的缺陷报告()我会说你的例子是正确的(虽然我对标准不知道足够的)。S7 AMUSER NO.C的意思是C17显然是C11标准的一个小修订而不是一个全新的标准,这可能是为什么它不被列为标准。初始化是C17中更改的内容。