zoukankan      html  css  js  c++  java
  • c语言的编译过程和GCC 编译参数

    原文: http://www.cnblogs.com/zhangShanGui/p/4912135.html

    C语言的编译过程和GCC编译参数

    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 % ",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“”
  • 相关阅读:
    查找 Search
    [HEOI2016/TJOI2016]排序
    [SDOI2011\]染色
    [构造题选讲]
    [LNOI2014]LCA
    [POI2013]LUKTriumphal arch
    java取得某月最后一天
    设置上网代理服务器
    Richfaces改变我的编程方式
    Richfaces Style
  • 原文地址:https://www.cnblogs.com/oxspirt/p/6206835.html
Copyright © 2011-2022 走看看