写这篇纯粹就是钻牛角尖,把排列组合的精神发挥得淋漓尽致~
变量可见 指的是变量可访问,不一定可修改。
//test.h 用extern声明,不分配内存
extern int sss;
//test.c ,分配内存
int sss = 10;
//main.c 一次定义,可以多次声明
extern int sss;
cout << sss << endl; //这里要想用,必须extern声明【注意这里没include test.h】
//test.c 定义变量
int sss = 10;
//main.c 一次定义,可以多次声明
extern int sss;
cout << sss << endl; //这里要想用,必须extern声明【这里也没include】
//test.h 定义变量
int sss = 10;
//main.c 一次定义,可以多次声明
extern int sss;
cout << sss << endl; //这里要想用,必须extern声明【注意这里没include test.h】
再加把劲儿,逼死强迫症~【不过下面的做法,是禁止行为,这里只是试试效果】
//test.h
static int testtest; //声明
//test.cpp
static int testtest = 10; //定义
//main.cpp
#include<string>
#include<iostream>
#include<stdlib.h>
#include "test.h" //include
using namespace std;
int main()
{
cout << testtest << endl; //无法调用
system("pause");
return 0;
}
//报错信息 testtest重复定义【去掉static 这种声明定义调用方式也会报错 重复定义】
//头文件里的static导致很多include它的源文件被分别拷贝到不同单个文件范围,各个文件里的static修饰变量相互独立[同名 但是不同变量]
做了点位置改动,下面的做法是ok的【要用static全局变量,就在头文件里直接定义好了】
//test.h
static int testtest=10; //定义
//main.cpp
#include<string>
#include<iostream>
#include<stdlib.h>
#include "class_basic.h" //include
using namespace std;
int main()
{
cout << testtest << endl; //正常可调用
system("pause");
return 0;
}