zoukankan      html  css  js  c++  java
  • c编译过程

    c的编译过程是一个很简单的问题,但是就是有很多我会经常忘记,包括我自己,所以既然这个东东非常重要又很容易忘记,所以多看几次就好了嘛,所以今天在这里总结一下。

    参考网站:http://www.cnblogs.com/wuyouxiaocai/p/5701088.html

    预处理

    (1)将所有的#define删除,并且展开所有的宏定义。说白了就是字符替换

    (2)处理所有的条件编译指令,#ifdef #ifndef #endif等,就是带#的那些

    (3)处理#include,将#include指向的文件插入到该行处

    (4)删除所有注释

    (5)添加行号和文件标示,这样的在调试和编译出错的时候才知道是是哪个文件的哪一行

    (6)保留#pragma编译器指令,因为编译器需要使用它们。

    那么,什么时候需要预处理呢?

    1、总是使用不经常改动的大型代码体。
    2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。

    编译

    (1)词法分析,

    (2)语法分析

    (3)语义分析

    (4)优化后生成相应的汇编代码

    从 高级语言->汇编语言->机器语言(二进制)

    链接

    就像刚才的hello.c它使用到了C标准库的东西“printf”,但是编译过程只是把源文件翻译成二进制而已,这个二进制还不能直接执行,这个时候就需要做一个动作,

    将翻译成的二进制与需要用到库绑定在一块。打个比方编译的过程就向你对你老婆说,我要吃雪糕。你只是给你老婆发出了你要吃雪糕的诉求而已,但是雪糕还没有到。

    绑定就是说你要吃的雪糕你的老婆已经给你买了,你可以happy。

  • 相关阅读:
    Keras如何构造简单的CNN网络
    到底该如何入门Keras、Theano呢?(浅谈)
    PyCharm使用技巧记录(一)如何查看变量
    使用 环境变量 来配置批量配置apache
    QT静态链接
    NTP服务器
    debian添加sudo
    龙芯8089_D安装debian 8 iessie
    verilog 双向IO实现
    FPGA入门学习第一课:二分频器
  • 原文地址:https://www.cnblogs.com/wenzong/p/7608940.html
Copyright © 2011-2022 走看看