#ifndef与#endif
#ifndef A
#define A
...
...
#endif
在同一个文件中只能讲同一个头文件包含一次。
使用这种技术为了将文件内容包含在#ifndef中
就是说如果编译器第一次碰到A的定义,则会查看ifndef到endif之间的内容,并读取A定义这一行
如果在同一个文件中遇到包含该文件的代码,则直接跳到endif后面的一行上。
注意:这种方法不是防止编译器将文件包含两次,而是让它忽略第一次包含之外的所有内容。
静态持续变量(static)
C++为静态存储持续变量提供了三种链接性:外部链接(可在其他文件访问),内部链接(只能在当前文件访问)与无链接(只能在当前函数或代码块中访问)。
编译器将分配固态内存块来存储所有的静态变量,这些变量在整个程序执行期间一直存在。
分别介绍一下特点:
1.想创建链接性为外部的静态持续变量,必须在代码块的外面声明它.(外部变量)
2.想创建链接性为内部的静态持续变量,必须在代码块的外面声明它,并且用static限定符。(静态全局)
3.想创建没有链接性的静态持续变量,必须在代码块内部声明它,并使用static限定符。(静态局部)
int A = 0;
static int B = 0;
int main()
{
...;
}
void fun1(int t)
{
static int count = 0;
int llama = 0;
}
例如这样的代码,A为外部的静态持续变量,B为内部的,count为无链接的
但是count与llama不同的是,count哪怕在fun1没有执行的时候,也留在内存中。
c-v限定符:
const与volatile
它表明,内存被初始化后,程序便不能再对它进行修改
mutable:
它用来指出:即使结构(或类)变量为const,其某个成员也可以被修改。
再谈const:
在默认情况下全局变量的链接性为外部的,但是const全局变量的链接性为内部的。
内部链接性意味着,每个文件都有自己的一组常量,而不是所有文件共享一组常量。每个定义都是其所属文件私有的。
我们可以用extern来覆盖默认的内部链接性,编程外部的
extern const int A = 50;
这种情况下,必须在所有使用该常量的文件中使用extern关键字来声明。
通常,编译器使用三块独立的内存:一块用于静态变量(可能再细分),一块用于自动变量,一块用于动态存储