我有一个struct
,我们称之为struct foo
,我想在其中添加一个atomic_flag
变量。到目前为止,我已经calloc
使用该结构,因为该结构大多数都需要零初始化。
我应该如何初始化atomic_flag
成员?
struct foo{
//...
atomic_flag a_flg;
//...
};
struct foo *foop = calloc(1,sizeof *foop);
if(!foop) return -1;
//should I be giving up `calloc` (/`malloc`+`memset`) in favor of `malloc`+this?
*foop = (struct foo){ ATOMIC_FLAG_INIT };
编辑:
我发现DR#421与此相关的Jens Gustedt提议将零/默认初始化仅适用于atomic_flag
s。我怎么知道它是否被接受?
答案 0 :(得分:4)
C11标准在7.17.8p4上说:
未用
atomic_flag
显式初始化的ATOMIC_FLAG_INIT
最初处于不确定状态。
并且没有任何迹象表明atomic_flag
是什么类型或它的内容,因此此处的零清零无济于事。
您将需要使用宏或atomic_flag_clear
或atomic_flag_clear_explicit
函数将其初始化为已知状态。