#ifndef与#endif与Static

#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关键字来声明。

 

通常,编译器使用三块独立的内存:一块用于静态变量(可能再细分),一块用于自动变量,一块用于动态存储

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章