//learnc13.h
/*
存储持续性:
1:自动:函数中声明的变量。在执行完函数时内存被释放。
2:静态:函数外和使用static定义的变量。在程序整个运行过程中都存在。
3:线程:使用thread_local声明的变量。
4:动态:使用new分配的内存。会一直存在,直到使用delete释放或者程序运行结束。
作用域描述了名称在文件的多大范围可见。
连接性描述了名称如何在不同文件之间共享。
*/
#ifndef LEARNC13
#define LEARNC13
using namespace std;
struct user {
int age;
};
void func();
#endif // !LEARNC13
//learnc131.cpp
#include "learnc13.h"
#include<iostream>
int global = 100;//静态存储,外部链接,又叫做外部变量,其他文件可访问
static int internal_1 = 50;//静态存储,内部链接。只能在本文件中访问
const int internal_2 = 30;//静态存储,内部链接。只能在本文件中访问
void func1();
static void func2();//使用 static修饰,表示内部连接,只能在本文件中访问。
void func() {
int local = 10;//自动存储,函数运行结束及销毁。
static int count = 0;//静态存储,不可链接,只能在本函数中使用。函数运行结束,不会消失。
count++;
internal_1++;
cout << internal_1 << " " << internal_2 << endl;
cout << "func函数第" << count << "次调用" << endl;
}
void func1() {
cout << "func1" << endl;
}
static void func2() {
cout << "func2" << endl;
}
//learnc13.cpp 存储持续性,作用域和连接性
#include<iostream>
#include "learnc13.h"
extern int global;//使用extern,来连接外部文件定义的外部变量。
extern void func1();
//extern void func2(); 不可用,因为外部文件中func2是static
int main() {
cout << global << endl;
func();
func();
//调用外部函数
func1();
//new运算符动态分配内存
user *u = new user;
u->age = 100;
cout << u->age << endl;
delete u;
return 0;
}
输出结果:
100
51 30
func函数第1次调用
52 30
func函数第2次调用
func1
100