首页 > 解决方案 > 如何理解 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-...来回答这个问题。

标签: gcccompilationcompiler-construction

解决方案


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;
                         ^~~~~~

您还可以通过链接查看它的工作原理

对不起我的英语不好。


推荐阅读