C++基础(一) 基础知识

C++编译过程

  1. 预处理(Preprocessing)

    将所有的#include头文件以及宏定义替换成其真正的内容,预处理之后得到的仍然是文本文件,但文件体积会大很多。gcc的预处理是预处理器cpp来完成的。(include只做文本插入,在include的位置将头文件展开)

  2. 编译(Compilation)

    这里的编译不是指程序从源文件到二进制程序的全部过程,而是指将经过预处理之后的程序转换成特定**汇编代码(assembly code)**的过程。

    一个cpp文件是一个编译单元。

  3. 汇编(Assemble)

    汇编过程将上一步的汇编代码转换成**机器码(machine code)**,这一步产生的文件叫做目标文件,是二进制格式。

    这一步会为每一个源文件产生一个目标文件

  4. 链接(Linking)

    链接过程将多个目标文以及所需的库文件(.so等)链接成最终的可执行文件(executable file)

compiler

预处理阶段将宏所写内容替换

宏没有类型检查

在宏外加括号防止运算符优先级错误

在宏后不需要加分号(非C++语句)

头文件

把函数原型放到头文件中,在需要调用这个函数的源代码文件中include到这个头文件,能让编译器在编译时知道函数的原型,以确保函数类型的统一

头文件里存放声明(extren变量,函数原型,类或结构体的定义),cpp文件里存放定义

header

头文件的标准格式

用宏定义防止:

  1. 两个头文件相互include时的循环include
  2. cpp在include不同头文件时可能产生的重复定义(class不能重复定义)
1
2
3
# ifndef _MY_H_
# define _MY_H_
# endif

其他

  1. endl将与设备关联的缓冲区(buffer)中的内容刷到设备中。在调试时应保证”一直”刷新流。否则若程序崩溃,输出可能还是缓冲区,导致对于程序崩溃位置的错误推断

  2. 读取数量不定的输入数据可用while (std::in >> value)

    当遇到文件结束符(end-of-file),或遇到一个无效输入时,istream对象状态变为无效,使条件为假

    EOF:在Windows中为Ctrl+Z,UNIX为Ctrl+D

作者

Martin

发布于

2023-05-26

更新于

2023-05-26

许可协议

You need to set install_url to use ShareThis. Please set it in _config.yml.
You forgot to set the business or currency_code for Paypal. Please set it in _config.yml.

评论

You forgot to set the shortname for Disqus. Please set it in _config.yml.

You need to set client_id and slot_id to show this AD unit. Please set it in _config.yml.