这里有一个相关的“什么”问题:原子类型说明符和限定符
我感兴趣的是为什么,因为C11的基本原理还没有发布,这似乎是不必要的复杂。
语法包括这两个方面(并且解决了歧义性,有利于shift进行(,而不是reduce (否则如果后面跟着declarator或abstract-declarator),则可以从declaration-specifiers或specifier-qualifier-list获得)。
atomic-type-specifier: _Atomic ( type-name )
type-qualifier: _Atomic这将导致以下代码:
int i1;
int (i2); // valid, same as i1 - usually seen in the context of pointer-to-function or pointer-to-array
int _Atomic a1;
int _Atomic (a2); // invalid
_Atomic (int) a3; // valid, same as a1思想:
_Atomic不能修改数组或函数。如果声明器周围没有多余的括号,这意味着它对#define _Atomic(x) x _Atomic是有效的(当然,如果它对#define关键字是合法的)。qualifier的形式出现时,_Atomic是与const相同的语法部分,C程序员已经习惯于将const放在正确的一边,所以它不可能是“易用”的。发布于 2016-04-03 04:05:39
基本原理在N1485中找到。
_Atomic关键字也可以作为等同于_Atomic T的类型说明符在表单_Atomic(T)中使用,其中T是类型。因此,_Atomic(T) x, y;使用相同的类型声明x和y,即使T是指针类型。这允许C++0x与仅C++的_Atomic(T)宏定义为atomic<T>的简单兼容性。
https://stackoverflow.com/questions/36381380
复制相似问题