今天来写一写.cpp文件是怎么一步一步变成.exe文件的,以便更好的理解C++内核

第一步

先用编辑器编辑好源代码文件,也就是.cpp文件

int main() {}

然后是对该文件进行预处理,也就是常用的三个预处理命令(此三者严格意义上不算是C++的语句):
文件包含:将该文件内容合并到源代码中

#include <iostream>

条件编译:有时候一个头文件可以引入另外一个头文件,条件编译防止头文件的重复包含和编译

#ifndef __PERSON_H__     // 如果这个头文件没有被包含
#define __PERSON_H__        // 就包含这个头文件并且定义这个变量
#endif

宏定义:宏不占内存,编译器在编译之前对源代码做一些文本替换的处理

#define MAXSIZE 100

第二步

对该文件中的内容进行词法、语法分析,然后转化成二进制文件(.obj&.o文件后缀)

之后把二进制文件(.obj&.o文件后缀)和静态链接库(.lib&.a文件后缀)进行合成为.exe文件
静态链接库:可以看做是自己写的.h文件生成的.lib(Windows)或者.a(Linux&Unix)文件

第三步

运行.exe文件,并在过程中加载动态链接库(.dll文件后缀)
动态链接库:通过外部引入的.dll配置文件,如数据库,如opencv等等

附:
静态链接库比动态链接库更耗内存,静态链接库是由多个文件组成的,运行过程中,分别在内存中开辟不同的内存空间;而动态内存都只在一块内存中进行存储

C++的.cpp文件运行全过程相关推荐

  1. Linux下运行.cpp文件

    如何在Ubuntu16下运行一个简单的.cpp文件呢,做法如下: 假设我在桌面上写了一个hell,world程序; 保存为abc.cpp 然后在终端打开: 1.点击保存的文件的属性,看在哪里,我的是在 ...

  2. vs+命令行运行带参数cpp文件

    1,创建一个vs控制台应用,结果如下: 2,cpp文件中写入以下文件,并且要配置好opencv库 // read.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并 ...

  3. 在XCode的一个项目中创建多个C/C++/Cpp文件并分别运行——创建多个target实现

    首先创建一个project:打开XCode并选择Create a new Xcode project 选择macOS-Command Line Tool,点击Next,然后输入project名称,并选 ...

  4. CLin 和 IDEA创建文件时自动添加作者和时间信息 + 多个.cpp文件在CLion下运行问题...

    CLin 和 IDEA创建文件时自动添加作者和时间信息 file -> setting -> Editor -> File and Code Templates -> 点击In ...

  5. 关于vs在.cpp提取头文件运行的时候一直报错“xx函数主体重定义”

    .....本来把主函数的一些封装的函数放到头文件里面的,结果编译运行在主函数调用的时候头文件一直报错"xxxx函数"已经有主体, cpp文件就说我调用的头文件的函数名是未识别的标识 ...

  6. vscode运行cpp文件:检测到 #include 错误。请更新 includePath。已为此翻译单元(E:\C++ Code\test1\test1\test1.cpp)禁用波形曲线。

    刚为vscode配置好C++编译环境准备刷leetcode,结果写cpp文件时发现#include头文件总是报错: 我就很迷惑了,#include<iostream>也能出错,找了半天教程 ...

  7. Linux下xxx.c文件与xxx.cpp文件的编辑和运行命令

    Linux平台下.c文件的编辑和运行命令 在 Linux 平台下我是用vim文本编辑器编写代码的 一:在Linux环境下编辑.编译并执行一个 xxx.c 文件步骤 1.首先要创建一个xxx.c文件 输 ...

  8. window+cmd+.cpp(window系统命令行运行.cpp文件) + LINK : fatal error LNK1104: cannot open file ‘LIBCMT.lib‘

    在window系统中,命令行运行.cpp文件的步骤(假定已经安装好visual studio 2015): 1. 设置环境变量:C:\Program Files (x86)\Microsoft Vis ...

  9. C 怎么读取Cpp文件_python之调用C加速计算(一)

    一.前言 python语言是目前比较火的语言,很容易上手,对数据处理也比较友好,可以用几行代码就能进行一些简单的数据处理工作.但是对于稍微大型的数值计算,或者一些涉及到大量循环的数值计算python的 ...

  10. C/C++:多个.cpp文件包括同一个.h头文件定义方法

    本文解决multiple definition of `XX'的错误.[出于反爬虫的目的,你不是在http://blog.csdn.net/zhanh1218上看到的,肯定不是最新最全的.] 关于头文 ...

最新文章

  1. LoadRunner 测试Tuxedo的问题
  2. 一起学习android图片四舍五入图片集资源 (28)
  3. vs2010 插件不显示的问题处理。
  4. [Markdown语法][快速入门][CSDN]
  5. 斐波那契回调线怎么画_Lionheart万汇:斐波那契回调线,实战使用方法和难点
  6. 机器学习第18篇 - Boruta特征变量筛选(2)
  7. python tkinter库函数详解_Python使用tkinter库进行GUI编程中常用事件处理方式汇总
  8. 【顶】辞职也需要辞得帅,辞得大家都开心,多为将来考虑,辞职不要急,本是好事要办好...
  9. GD2拖动验证码Thinkphp版
  10. 为什么「margin:auto」可以让块级元素水平居中?
  11. 百度豆丁文档免费下载神器
  12. 《智豆SOW白皮书》重磅发布 附全文
  13. python判断火车票座位号分布图_如何选择火车靠窗座位和选座位技巧!
  14. FZU1892接水管游戏-BFS加上简单的状态压缩和位运算处理
  15. [转贴]一位营销总监的辞职信(非常经典)
  16. Linux局域网共享打印机(实用型文档)
  17. linux 日志空间,情景linux--如何解决服务器日志过多导致的磁盘空间不足?
  18. 经典案例重点案例:点名表,JS正则验证全选、全不选、反选,点击可以实现三个功能,轮播图 字符串截取以及替换,图片切换
  19. iview+时间选择器+禁止选择事件
  20. 批处理文件调用oracle实例

热门文章

  1. 中国微控制器市场趋势报告、技术动态创新及市场预测
  2. 深度解析京东个性化推荐系统演进史
  3. WireGuard 教程:使用 DNS-SD 进行 NAT-to-NAT 穿透
  4. 电脑分屏操作,提高工作和学习效率
  5. 远程桌面管理助手有哪些?11款最好的远程桌面软件推荐。
  6. LoadRunner 11.50 下载+安装+补丁
  7. SpringBoot 整合 kaptcha + redis 实现 图形验证码登录
  8. H7000 DTU 问与答
  9. 爬虫 requests User-Agent池 FakeUserAgent URL传参
  10. gdal、geos的 windows编译 openCL加速