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

    概述

    总共三步走,预编译,编译,链接,接下来会讲具体做了啥事儿和场景

    预编译

    预编译也就是在编译之前做的一个事儿,这里会把一些预编译指令的要求给执行然后替换,预编译指令有 #include  #define  #ifdef  #ifndef  #endif    #elif   #else

    预编译的过程就是相当于把预编译指令的东西进行了一个替换,#define M  5    也就是把所有M的地方变成5,把#include的地方变成include的内容,到编译的时候所有预编译指令的任务就完成了,因为已经实施完了所有的替换。

    #ifndef  hanhan
        #define hanhan
        #include "_hanhan_father"
        class hanhan:hanhan_father{ //用到hanhan_father头文件里的类来进行继承
             ...
        }
    #endif    

    解释下这段代码,首先我们入门的时候经常只要编写一个文件就可以了,但是后面如果要做项目和入职工作的话都要编写.h文件进行函数的声明,但是如果我们多个文件都包含了头文件,相当于是把头文件里面的事情做了多次,这样是很耗费时间的,那么我们实际上只要弄一次就够了,所以我们相当于弄了个预编译的宏当标记变量代表只调用一次,这样就避免了无效的编译

    这里证明一下,我找到了我文件目录下的stdio.h文件,里面都是些系统调用,然后就是写声明了(因为.h文件会被多个文件所包含,如果有定义或者实现的话就会产生重复

    编译

    将.c或者.cpp文件编译成一个opj目标文件,这个步骤也就是对源文件产生一个临时文件然后翻译成了机器语言

    链接

    把opj文件再和标准库链接在一起变成一个可以运行的exe文件

  • 相关阅读:
    Netsharp快速入门(之17) Netsharp基础功能(参照高级设置)
    Netsharp快速入门(之16) Netsharp基础功能(权限管理)
    安装 SQL SERVER PROFILER
    运用 DataContractSerializer 存储本地对象
    坑人的 try catch finally
    截图库
    Asp.Net MVC 过滤器
    Application、Session、Cookie、ViewState的特性
    Ioc 比较
    Redis 安装与配置
  • 原文地址:https://www.cnblogs.com/Lis-/p/12571308.html
Copyright © 2011-2022 走看看