专栏首页程序员互动联盟【专业技术第七讲】linux下如何编译C语言?

【专业技术第七讲】linux下如何编译C语言?

存在问题:

小伙伴们都知道gcc -c -o 但是其中的过程和一些参数就不是太清楚了,往往编译出错不知道咋办?

解决方案:

我们来简单普及一下,让大家不盲从请看以下

C语言的编译一般有三个步骤:

  1. 预编译:

gcc -E -o a.e a.c

预编译a.c文件,生成的目标文件名为a.e

预编译就是将include包含的头文件内容替换到C文件中,同时删除代码中没用的注释

示例:

//main.c

#include <stdio.h>

#include "sum.h"

int main(){

int m = 6;

int n = 5;

int result = sum(m,n); printf("hello\n%\n",result);

//sum.h

int sum(int x,int y);

运行之后结果为:

第一步就是这样的啦!

2 . 编译

gcc -S -o a.s a.e

将a.e翻译成一个ASCII汇编语言文件a.s.

3 .链接

gcc -o a a.s

这行命令告诉gcc对源程序a.o进行链接,生成可执行程序a

gcc 没有任何参数,表示就是链接

GCC编译器的基本选项如下表:

类型

说明

-E

预处理后即停止,不进行编译、汇编及连接

-S

编译后即停止,不进行汇编及连接

-c

编译或汇编源文件,但不进行连接

-o file

指定输出文件file

C语言的include头文件

  1. include是要告诉编译器,包含头文件
  2. 在C语言中,任何的库函数调用都需要包含头文件
  3. 头文件也相当于一个文档声明
  4. 如果把main函数放在第一个文件中,而把自定义函数放在第二个文件中,那么就需要在第一个文件中声明函数原型
  5. 如果把函数原型包含在一个头文件中,那么就不用每次使用函数的时候都声明其原型了,把函数声明放进头文件中是个好习惯!
  6. 头文件可以不需要编译
  7. 可以查看具体的声明
  8. 头文件加上实现文件的o文件提交给使用者即可,不需要知道源代码
  9. o文件预先编译,所以整个项目编译时,会大大提高编译的时间 。
  10. 当一个文件(A.c文件)依赖于头文件(b.h)时,如果b.c编译之后形成的b.o文件重新编译后,a.o的文件不需要重新编译
  11. 可以极大降低手工复制,粘贴的错误几率

头文件的注意事项:

  1. <头文件>,表示让C语言编译器在系统目录(即gcc编译器的include目录下)下寻找相关的头文件
  2. “头文件”,表示让C语言编译器在用户当前目录下寻找相关的头文件
  3. 如果是使用了C语言库函数的需要的头文件,那么一定是#include<>
  4. 如果是使用了用户自定义的头文件,那么一定是#include“”

来自:http://www.cnblogs.com/zhangShanGui/p/4912135.html


本文分享自微信公众号 - 程序员互动联盟(coder_online)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-11-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用C语言中的头文件有什么技巧和注意事项吗?为什么不直接包含C文件呢?

    从事嵌入式开发多年,对于C语言使用的频率比较多,现在讲讲C语言在平时编程工作中经常出现的一些问题,就以楼主的题目为切入点分析归纳下,分享给正在使用或者学习C语言...

    程序员互动联盟
  • 【答疑解惑第三十一讲】如何使用全局变量?

    疑惑一 全局变量如何用? ? 看图中的箭头的地方,声明全局变量的时候使用了static,这个问题就涉及到了static的使用,如果要使用全局变量,并且在多文件中...

    程序员互动联盟
  • 自学编程成功概率有几何?

    坦白的讲一个人获得知识的方法有两种,一个是通过别人教,另一种就是自己学,然而通过别人教的方式一般都是需要付出一些金钱的,比如我上学的时候需要教学费,培训的时候就...

    程序员互动联盟
  • 加快C++代码的编译速度方法【转载】

    C++代码一直以其运行时的高性能高调面对世人, 但是说起编译速度,却只有低调的份了。比如我现在工作的源代码,哪怕使用Incredibuild调动近百台机子,一个...

  • 程序员C语言快速上手——进阶篇(七)

    最早的C语言仅仅用来编写小而美的代码,总共不超过100行,随着计算机软件的发展,小程序变成了大型软件工程,整个项目是由多人协同开发完成的,一个人显然已经玩不动了...

    arcticfox
  • dotnet core 2.1 使用阶梯编译

    在 dotnet core 2.1 可以使用阶梯编译的方法,从 dotnet framework 开始,在代码的所有方法在第一次进入的时候就需要使用 JIT 进...

    林德熙
  • 如何用matlab制作演示动画并存储

    之前给大家介绍过如何使用matlab绘制静态图像,但是实际应用过程中往往可能需要动态的展示计算结果,因此推出本期内容来介绍如何使用matlab制作演示动画并存储...

    matlab爱好者
  • python网络爬虫(8)多媒体文件抽取

    回调函数中,count表示已下载的数据块,size数据块大小,total表示总大小。

    嘘、小点声
  • 一些容易忽略的Java基础题

    Oracle 在 DDL 前后各执行一次 COMMIT,所以慎用 truncate

    林万程
  • go编译出来的exe逆向

    编译过的主函数就在main_main当中,当然捆绑了一大堆运行时库,但你写的代码入口就在这里。

    战神伽罗

扫码关注云+社区

领取腾讯云代金券