gpt4 book ai didi

c - init-declarator-list 和 GNU GCC 属性语法

转载 作者:太空狗 更新时间:2023-10-29 15:08:16 26 4
gpt4 key购买 nike

我正在改进内部 C 语言 bison/flex 解析器,其中包括引入适当的 __ attribute__ 支持。

由于我找不到任何描述 GNU GCC __ attribute__ idea 的官方 BNF 样式语法(http://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html 文档除外),我从 C++x11 标准中提取点点滴滴,并在网上找到各种实现的评论.

我几乎完成了它(至少在解析上面引用的 GCC 文档中包含的示例时是这样)但是一个特定的示例让我很头疼,因为在外部资源中没有任何解决方案的提示。

示例如下:

__attribute__((noreturn)) void d0 (void),
__attribute__((format(printf, 1, 2))) d1 (const char *, ...),
d2 (void);

所附的说明是这样说的:

An attribute specifier list may appear immediately before a declarator (other than the first) in a comma-separated list of declarators in a declaration of more than one identifier using a single list of specifiers and qualifiers. Such attribute specifiers apply only to the identifier before whose declarator they appear.

因此,引导我找到这个解决方案:

init-declarator-list:
init-declarator
init-declarator-list , attribute-specifier-seq[opt] init-declarator

我知道它有效,但如果这是解决上述情况的正确方法,我想寻求验证/支持。

谢谢,

沃伊切赫

编辑:这个链接(虽然有点过时了)提供了一个和我一样的解决方案:http://plg.uwaterloo.ca/~cforall/gcc.y奇怪的是,我之前没有偶然发现它,直到现在我搜索 __ extension__ 关键字时才偶然发现。

最佳答案

早期版本的 GCC 2.X.X 曾经依赖 bison 进行解析。因此,下载旧版本应该可以满足您的需求。

请注意新的 GCC 版本引入了新的属性 ...

关于c - init-declarator-list 和 GNU GCC 属性语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15250318/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com