gcc c语言编译流程

 

1前言

 

最近群里讨论个C语言的小程序,看起来都不是很难,但是大家对答案有争论,所以想讨论编译原理,做嵌入式要对编译原理有一定的了解,所以转了这篇文章。

我们之前讨论的问题如下代码

#include 
#include 

#define WEIQIFA 0;

int main(void) 
{        
    int i = WEIQIFA;        
    i = i++;
    i++;        
    printf("%d\n",i);
    return 0;
}

 

原来是没有那个宏WEIQIFA的,但是我为了举例编译原理,特意加上去,编译的第一步就是做宏替换

预编译后变成下面这样

 

int main(void)
{

    int i = 0;;
    i = i++;
    i++;
    printf("%d\n",i);
    return 0;
}

用g++ -g -Wstrict-prototypes -Wall -Wunused -o test test001.c 编译

然后用objdump -j .text -Sl test | more 查看代码可以看到汇编代码如下

 

main():
/data/weiqifa/c/bianyiyuanli/test001.c:7
#include 

#define WEIQIFA 0;

int main(void) 
{
  400526:       55                      push   %rbp
  400527:       48 89 e5                mov    %rsp,%rbp
  40052a:       48 83 ec 10             sub 

你可能感兴趣的:(C,Linux,嵌入式学习)