我有一个struct
,我们称之为struct foo
,我想添加一个atomic_flag
变量。到目前为止,我一直在对结构进行calloc
ing,因为它主要需要初始化为零。我该如何初始化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。我如何知道它是否被接受?
C11标准在7.17.8p4上说:
未使用
atomic_flag
明确初始化的ATOMIC_FLAG_INIT
最初处于不确定状态。
并没有迹象表明atomic_flag
类型是什么或它的内容,所以零在这里没有帮助。
您需要使用宏或atomic_flag_clear
或atomic_flag_clear_explicit
函数将其初始化为已知状态。