【编程语法-C++】课堂总结01-07
这几节课主要是学习了解c++语言和其他语言的不同点,以及基本特性。
不同点
c++语言和c#、java虽然都是面向对象的语言,但对于complier是完全不一样的作用方式。
模式
debug模式:禁用优化,会慢一些,但生成更多的信息
release模式:启用优化,会过滤无用操作
preprocessor statement
#include 做的就是将文件复制到另一个文件 #if 1 #endif 做的就是通过条件将中间的代码是否进行编译 #define 定义任意一个symbol,在编译过程替换
error list
- C开头的是编译错误
- LNK开头的是链接错误
声明和定义
- 每个cpp编译的时候都需要知道文件里的symbol代表什么
- 编译过程只要有声明就不会报错,但在build过程linker会寻找声明的函数主体,也就是定义
- 寻找的过程根据函数名称,参数,返回类型来寻找,若有好几个就会发生重载问题
- 解决重载有几个方法:static函数,让函数只能对当前cpp可见,也就是说不会被链接到其他cpp;另一种方式就是
compling
enter point -> main function
c++是可以直接转化为机器码/二进制文件让硬件进行执行。
整个过程可以分为:
compile: 编译cpp(translation unit)生成obj
cpp文件可能会相互调用(一个translation unit不一定等于一个cpp)
更细致的分为:
- 处理preprocessor statement
- 编译器将代码转化为constant data(常数数据)、instructions(指令)
- 编译器产生抽象语法树产生机器码obj文件,可以选择asm来看汇编语言