c - 如果 C11 关键字 '_Atomic' 后跟空格和左括号,是否算作类型限定符或说明符?

标签 c syntax grammar atomic c11

阅读 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/

相关文章:

c - 警告 : return makes pointer from integer without a cast using malloc sizeof struct in C

c - 漏洞利用:SIGSEGV、段错误

javascript - 使用 "and or"语法进行空检查

git - 这些 `git fetch` 语法有什么区别?

regex - 什么是上下文无关语法?

c - 当我在.h中使用预处理#warning时如何避免来自gcc的多重警告

Vim 折叠特定文本 block

python - pypeg2 - 可以使用 peg 语法解析此表达式吗?

javascript - JavaScript 语法部分的左因式分解

c - Ubuntu readline() 和 makefile