内联函数、ROP、头文件、namespace、宏
# Lecture 07
# 程序组织

# 头文件

# 作用域
程序级
文件级
函数级
块级
# 生命周期
main 函数中的变量的生命周期一般是整个程序。
idle pointer
# 头文件中包含的内容
- 常量定义 ![image-20221004195026698]() 
- 变量 / 函数定义 ![image-20221004194957282]() 
- 编译预处理 
- 类型定义(class\ 接口) 
- 内联函数 
# include"a.h"
井号
编译预处理,把头文件的复制过来
static
只要不在头文件中,就不能更改 —— 加上 static ,把变量或者函数的程序级限制到文件级
const
默认属性是 static
写在另外 "const.h" 文件中
# namespace
# 两种形式

- declaration (绝对路径)
- directive(批量处理)
# details

- 别名 - namespace American_Telephone_and_Telegraph {…… } - …….- namespace ATT = American_Telephone_and_Telegraph 
- 全局 - int a; - namespace X- { int a; - void f() - { int a=0; - a++; - X::a++; - ::a++; - }- }
- 开放 - 可以在代码别的位置重新增加函数、变量 - namespace A- { int a; - …….- }- …….- namespace A- { void f() ; - …….- }
- 可嵌套 - 软工::三班::quasdo - namespace L1- { int a; - …….- namespace L2- { void f() ; - …….- }- }- …….. - L1::L2::f(); - using namespace L1; - L2::f(); 
- 重载 - namespace B- { void f(int) ; - …….- }- namespace A- { void f(char) ; - …….- }- void f(); - using namespace A; - void g() - {- f(‘1’); - }
重载 —— 有可能造成冲突和语义的错误
可能在 namespace A 和 namespace B 中均定义了同一个函数名,因此不建议在同一作用域两次使用 using-directive
# 编译预处理

gcc -7 -Dsqrt=rand -Dreturn=exit
define sqrt rand
虽然编译预处理可能会造成问题,但因为难以找到更好的结构且高效的替代品,没有取缔。
# 宏

while 后缺少;
形成完美的语句(不产生多余的空语句)
eight queen 八皇后问题,可用递归的方式求解


