是否允许以下代码?
_Atomic(unsigned int) a = 1;
if (a == 0) {
}
Run Code Online (Sandbox Code Playgroud)
C11规范(n1570)在6.3.2.1p2处说:
如果左值具有原子类型,则该值具有左值类型的非原子版本.
所以这似乎说没关系.
不,这样的初始化是不行的.您必须使用ATOMIC_VAR_INIT初始化原子对象.从C11 7.17.2.1:
ATOMIC_VAR_INIT宏扩展为适合初始化与value初始化兼容的类型的原子对象的标记序列.具有自动存储持续时间但未使用ATOMIC_VAR_INIT显式初始化的原子对象最初处于不确定状态; 但是,保证具有静态或线程本地存储持续时间的对象的默认(零)初始化会产生有效状态.
否则,对象将处于有效状态,但"不确定",因此您不知道它具有哪个值.
| 归档时间: |
|
| 查看次数: |
2344 次 |
| 最近记录: |