程序组织

image.png

作用域scope

  • 程序级:link中都是可见的
  • 函数级
  • 块级
  • 文件级

生命周期:获得内存 - > 失去内存。生命周期外的数据都是无效的
idle point 悬挂指针 – 想要的资源被人夺走了

引入外部数据

extern:非本地定义的,进行引入
image.png
头文件:将给别人的接口、数据写在头文件中。
image.png
#编译预处理符号,作用为**editor** include找到对应头文件,ctrl+all+进行copy。后缀.h不是必须的,是统一规范好的
static:将作用域由程序级限制为文件级。因此,即使变量重名,互相不影响。
image.png
公开的放入头文件中,为程序级。私有的设置static,为文件级。
对于常量:默认属性为static
使用常量头文件
image.png

main中的局部变量是全生命周期的
static定义的局部变量是静态局部变量,当自己创建后不会被消除

头文件

  1. 常量定义
  2. 变量、函数声明
  3. 编译预处理
  4. 类型定义
  5. inline函数

namespace

image.png
declaration:类似绝对路径
directive:使用目录,批量处理

  • 开放:当需要补充时,直接在当前文件补充代码即可
  • 别名
  • 全局
  • 可嵌套
  • 重载:不建议在同一作用域两次使用using-directive,优先考虑 using-declaration

image.png

static

c++中static的作用

  1. 修饰局部变量时,表明该变量的值不会因为函数终止而丢失。
  2. 修饰函数时,表明该函数只在同一文件中调用。
  3. 修饰全局变量时,表明一个全局变量只对定义在同一文件中的函数可见。

编译预处理

不理解cpp的语法,没有程序设计的概念。
image.png

  • 穿透作用域
  • 潜伏于环境 gcc -7 -Dsqrt=rand -Dreturn=exit 等价 #define sqrt random

image.png

替代编译预处理:
image.png
log:记录执行时间、次数等,利用_FILE_等宏。

ifdef

1
2
3
4
#define check 
#define release 定义最后将要发布的代码
#ifdef 如果check没有定义,则后面的相关代码根本不会产生。让程序员选择
将要参与编译的语句。仍然是在editor期间发挥作用
  • 版本控制
  • 注释代码

pragma

  1. error
  2. warning:包含潜在的错误,进行预警
    1. local variable没有定义
    2. strcpy 的两个长度不同
    3. 强制转换时会产生精度损失

利用pragma可以把warning升级为error

1
2
3
4
5
6
7
#include <stdio.h>
#pragma GCC diagnostic error "-Wuninitialized"

int main() {
int i; printf(“%d\n", i);
}

利用pragma进行编译预处理,常用于没有ide时