c语言编译过程5步骤,过程求

#define 、#include 等在预处理阶段处理而在编譯时已经不存在了,所以它们不是关键字

优势:原地展开没有调用开销;并且在预处理阶段完成,不占用编译的时间

缺点:不进行类型檢查实际传参和宏所希望的参数类型必须一致,否则可能出现编译不报错但是运行有误

#define 宏名 宏体(为安全起见加括号)

带参函数与带參宏定义的对比:

函数是编译期间处理的,在调用函数(用栈来做支持调用一次就会进行一次压栈)处跳转到函数中去执行,跳转执行唍再返回有比较大的调用开销。

宏定义是预编译期间原地展开没有调用开销,没有传参开销函数体很短时可以用宏定义来替代,提高效率

内联函数本身是函数所以编译器会进行参数的静态类型检查;同时内联函数原地展开,没有调用开销

命令格式:gcc [选项] [文件名]


-E:仅執行编译预处理; 

-c:仅执行编译操作不进行连接操作;

-S:将C代码转换为汇编代码; 

-o:指定生成的输出文件;

- I:指定查找头文件的目录。

宏定义:宏定义在预处理阶段由预处理器进行原封不动的替换(替换会递归进行直到替换出来的值不是宏为止)

:在源代码级别去修改配置开关来让程序编译出不同的结果

去掉程序中的注释:移除所有的注释有一个空格替换

GCC编译工具链:包括预处理器、编译器、汇编器、链接器

GCC进行编译链接的过程:四个步骤

执行 ./test 即可输出程序执行结果


带库文件连接的gcc编译指令


  

 注:默认情况下,GCC都是采用动态链接库的因此苼成的可执行文件小了很多。可以使用-static强制进行静态链接不过可执行文件就会很大。

}

这是一个再简单不过的c语言编译過程5步骤程序:

执行gcc test.c就使一个源文件变成了可执行文件,这个步骤我们很熟悉但是从一个源文件(.c文件)到可执行程序到底经历了哪幾步,每一步具体做了什么这是我想要总结一下的:

预处理阶段主要做了处理“#”的过程:有头文件展开,宏替换条件编译,去掉注釋等

编译阶段将高级语言翻译成机器语言,生成对应的汇编代码

汇编阶段主要将源文件翻译成二进制文件。

链接过程主要将翻译成的②进制文件与需要用到的库链接

gcc的这三个选项不太好记,我有一个窍门就是ESc,刚好就是键盘上的esc键这样就很快记住了,而三个选项對应的命名风格为iso。

}

我要回帖

更多关于 c语言编译过程5步骤 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信