这个问题的背景:我试图了解编译器是如何工作的。我学到了许多新的东西:扫描仪,解析器,AST,IR,优化,前端,后端,LL(1),…我取得了渐进的进步,这是非常有趣的。现在,我想做一些实际的工作。
从程序员的角度来看,我知道为什么typedef struct { int x; mytype* next; } mytype;不编译,我知道正确的语法typedef struct mystruct { int x; struct mystruct* next; } mytype;,但是我想知道在编译过程中到底是在哪里发生的。我正在使用gcc,我想知道怎样才能使用gcc开发人员选项-fdump-.来回答这个问题。
发布于 2019-06-18 09:03:30
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;
^~~~~~您还可以通过链接查看它是如何工作的。
对不起我的英语。
https://stackoverflow.com/questions/55039490
复制相似问题