深蓝学院C++基础笔记 第 0 章 C++介绍

一、什么是C++

1、c++ 是一门比较流行的编程语言
\qquad ●https://www.tiobe.com/tiobe-index/深蓝学院C++基础笔记 第 0 章 C++介绍_第1张图片2、c++是C 语言的扩展

● 更加关注性能
\qquad ● 与底层硬件紧密结合
\qquad \qquad java和python等语相对来说更加关注易用性。
\qquad ● 对象生命周期的精确控制
\qquad \qquad C#用完即弃,更易用
\qquad \qquad 及时释放空间,避免额外开销
\qquad ● Zero-overhead Abstraction
\qquad \qquad 无需为没有使用的语言特性付出成本
\qquad \qquad 使用了语言特性不等于付出成本,部分成本在编译器付出,运行期就会很快

 new在堆上开辟空间,常量在栈上。

● 引入大量特性,便于工程实践
\qquad ● 三种编程范式:面向过程、面向对象、泛型
\qquad ● 函数重载、异常处理、引用
3、 一系列不断衍进的标准集合

  • C++98/03 , C++11 , C++14 , C++17 , C++20
  • 语言本身的改进
  • 标准库的改进
    4、 C++ 标准的工业界实现
    编译器:
    windows: MSVC
    Linux: GCC / Clang

每个编译器可能并不完全遵照标准;不同的实现存在差异

总结:
不能脱离语境讨论C++
编写时要注重:
\qquad - 性能
\qquad - 标准

二、C++的开发环境和工具

  • VisualC++/GCC(G++)/Clang(Clang++)…
  • 集成开发环境:Visual Studio/CodeLite/Code::blocks/Eclipse…
  • 工具
    /usr/bin/time
    valgrind -内存泄漏之类查询
    cpp reference 【网站】
    Compiler explorer 【网站】
    C++insights
    cppcon:c++会议,可以在youtube看

编译工具:g++

三、c++的编译连接模型

  • 简单的加工模型- 深蓝学院C++基础笔记 第 0 章 C++介绍_第2张图片
  • 问题:无法处理大型程序
    加工耗时较长
    即使少量修改,也需要全部重新加工
  • 解决方案:分块处理- 深蓝学院C++基础笔记 第 0 章 C++介绍_第3张图片
  • 好处
    编译耗资源但一次处理输入较少
    链接输入较多但处理速度较快
    便于程序修改升级
  • 由“分块处理”衍生出的概念
    定义/声明
    头文件/源文件
    翻译单元
    ·源文件 +相关头文件(直接/间接)—应忽略的预处理语句
  • 一处定义原则:
    · 程序级:一般函数
    · 翻译单元级:内连函数、类、模板

c++的编译连接模型

预处理 -> 编译 -> 链接 -> 执行

预处理:-E 获取main.i

  • 将源文件转换为翻译单元
  • 头文件不应互相包含,防止头文件循环展开:
  • #ifdef
  • #pragma once
    在这里插入图片描述
    -S:生成啊相应的汇编代码
    在这里插入图片描述
    完整版:
    在这里插入图片描述
    编译
  • 将翻译单元转换为相应的汇编语言表示,生成.o目标文件
  • 编译优化
    -O0
    debug:引入优化少【开发】
    release:引入优化多 【最后编译使用】

源文件变化只编译源文件,头文件变化需要全部重新编
增量编译和全部编译

汇编:

链接: 合并多个目标文件,关联声明与定义

  • 连接(Linkage)种类:内部连接、外部连接、无连接
  • 链接常见错误:找不到定义
    C++的编译/链接过程是复杂的,预处理、编译与链接都可能出错
    编译可能产生警告、错误,都要重视

.o:目标文件

三、小结

  • C++是一门注重性能的程序设计语言
  • C++的标准经历类一系列的衍化,还在不断发展
  • 标准与具体实现之间存在差距
  • C++源程序转换成可执行文件是相对复杂的过程,主要包含预处理、编译、链接等阶段,每一阶段都可能引入错误

深蓝学院C++基础笔记 第 0 章 C++介绍_第4张图片

你可能感兴趣的:(深蓝学院C++笔记,c++,笔记,windows)