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“”
  • 相关阅读:
    MQTT TLS 加密传输
    python多进程并发redis
    各种消息队列的特点
    mqtt异步publish方法
    Numpy API Analysis
    Karma install steps for unit test of Angular JS app
    reinstall bower command
    Simulate getter in JavaScript by valueOf and toString method
    How to: Raise and Consume Events
    获取对象的类型信息 (JavaScript)
  • 原文地址:https://www.cnblogs.com/oxspirt/p/6206835.html
Copyright © 2011-2022 走看看