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