阅读 C11 标准的 N1570 草案,它在 p. 121 关于_Atomic 关键字:
If the _Atomic keyword is immediately followed by a left parenthesis, it is interpreted as a type specifier (with a type name), not as a type qualifier.
现在我想知道,在这种情况下,什么构成“立即”?
我觉得措辞很含糊: 标准是否保证以下两行代码始终相同?
明确的:
static _Atomic(type) var;
模棱两可的:
static _Atomic (type) var;
插入空格会破坏左括号的即时性吗?
虽然在第一种情况下,关键字始终是类型说明符,但在第二种情况下,我不确定它是类型说明符还是类型限定符,以及这是一个解释问题还是由标准明确定义。我还指的是“var”是指针的情况。
最佳答案
_Atomic
作为类型说明符或类型限定符分别显示在第 6.7.2.4 节和 6.7.3 节的语法中。文法用token表示(文法的终结符是C规范定义的token),翻译阶段7(5.1.1.2条款)分析文法:
White-space characters separating tokens are no longer significant. Each preprocessing token is converted into a token. The resulting tokens are syntactically and semantically analyzed and translated as a translation unit.
因此,空白是无关紧要的。
关于c - 如果 C11 关键字 '_Atomic' 后跟空格和左括号,是否算作类型限定符或说明符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57046444/