gcc - 如何理解 IN DEPTH gcc 编译器?
问题描述
这个问题的背景:我试图了解编译器是如何工作的。我学到了很多新东西:扫描仪、解析器、AST、IR、优化、前端、后端、LL(1)、……我循序渐进,非常有趣。现在,我想做一些实际的工作。
从程序员的角度来看,我知道为什么typedef struct { int x; mytype* next; } mytype;
不编译并且我知道正确的语法typedef struct mystruct { int x; struct mystruct* next; } mytype;
,但我想知道问题在编译过程中到底发生在哪里。我正在使用 gcc,我想知道如何使用 gcc 开发人员选项-fdump-...来回答这个问题。
解决方案
GCC编译器工作的第一步是解析器
c-parser.c
它将您的 c 或 c++ 或其他代码解析为 gimple 表示:
Parse -> Gimplify -> Tree -> SSA -> Optimize -> Generate -> RTL -> Optimize RTL Generate -> ASM
例如,可以在终端或 IDE 中的错误输出中找到错误,如下所示:
gcc yourcode.c
yourcode.c:2:25: error: unknown type name 'mytype'
typedef struct { int x; mytype* next; } mytype;
^~~~~~
您还可以通过链接查看它的工作原理
对不起我的英语不好。
推荐阅读
- reactjs - 在组件外部单击时如何更改状态?
- replication - 删除 Datastax Advanced Replication 生成的重新日志
- html - CSS 适用于 id,但不适用于 class,因为 bootstrap
- python - 无法从 jupyter 启动张量板
- java - 给定两个随机整数数组,打印它们的交集。也就是说,打印两个给定数组中存在的所有元素
- javascript - 如何在 jquery 中禁用事件?
- python - 自动化无聊的东西 - 第 5 章 - 国际象棋词典验证器
- json - 如何仅在循环结束时将数字加一?
- postgresql - postgresql、xpath 查询和 cdata 元素作为纯文本
- swiftui - SwiftUI 崩溃:“前提条件失败:属性未能设置初始值:71”