第四课 程序组织
程序组织

作用域scope
- 程序级:link中都是可见的
- 函数级
- 块级
- 文件级
生命周期:获得内存 - > 失去内存。生命周期外的数据都是无效的
idle point 悬挂指针 – 想要的资源被人夺走了
引入外部数据
extern:非本地定义的,进行引入
头文件:将给别人的接口、数据写在头文件中。
#编译预处理符号,作用为**editor** include找到对应头文件,ctrl+all+进行copy。后缀.h不是必须的,是统一规范好的
static:将作用域由程序级限制为文件级。因此,即使变量重名,互相不影响。
公开的放入头文件中,为程序级。私有的设置static,为文件级。
对于常量:默认属性为static
使用常量头文件
main中的局部变量是全生命周期的
static定义的局部变量是静态局部变量,当自己创建后不会被消除
头文件
- 常量定义
- 变量、函数声明
- 编译预处理
- 类型定义
- inline函数
namespace

declaration:类似绝对路径
directive:使用目录,批量处理
- 开放:当需要补充时,直接在当前文件补充代码即可
- 别名
- 全局
- 可嵌套
- 重载:不建议在同一作用域两次使用using-directive,优先考虑 using-declaration

static
- 修饰局部变量时,表明该变量的值不会因为函数终止而丢失。
- 修饰函数时,表明该函数只在同一文件中调用。
- 修饰全局变量时,表明一个全局变量只对定义在同一文件中的函数可见。
编译预处理
不理解cpp的语法,没有程序设计的概念。
- 穿透作用域
- 潜伏于环境
gcc -7 -Dsqrt=rand -Dreturn=exit等价#define sqrt random

替代编译预处理:
log:记录执行时间、次数等,利用_FILE_等宏。
ifdef
1 |
|
- 版本控制
- 注释代码
pragma
- error
- warning:包含潜在的错误,进行预警
- local variable没有定义
- strcpy 的两个长度不同
- 强制转换时会产生精度损失
利用pragma可以把warning升级为error
1 |
|
利用pragma进行编译预处理,常用于没有ide时
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 丁丁的小窝(*^_^*)!