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