内联函数、ROP、头文件、namespace、宏
# Lecture 07
# 程序组织
# 头文件
# 作用域
程序级
文件级
函数级
块级
# 生命周期
main 函数中的变量的生命周期一般是整个程序。
idle pointer
# 头文件中包含的内容
常量定义
变量 / 函数定义
编译预处理
类型定义(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 八皇后问题,可用递归的方式求解