gcc c言語コンパイルプロセス



1はじめに
 
最近グループの中でC言語の小さいプログラムを討論して、すべて難しくないように見えて、しかしみんなは答えに対して論争があって、だからコンパイルの原理を討論したいと思って、埋め込み式をしてコンパイルの原理に対して一定の理解があって、だからこの文章を回転しました.
私たちが前に議論した問題は次のコードです.
#include 
#include 

#define WEIQIFA 0;

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

 
もともとそのマクロWEIQIFAはなかったのですが、コンパイルの原理を例示するために、わざわざ加えて、コンパイルの第一歩はマクロの置き換えです.
プリコンパイル後は次のようになります.
 
int main(void)
{

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

g++-g-Wstrict-prototypes-Wall-Wunused-o test test 001を用いる.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