static
static修饰的全局是内部链接性。
内部链接性的在编译单元间不共享,编译单元你理解成源文件也马马虎虎。
extern
extern修饰的全局是共享性的
common.h
#pragma once
#ifndef _TOOL_H_
#define _TOOL_H_
//int a在这里定义只会重定义
//int a = 1;
static int b = 3;
extern int c;
//define ABC是不分配内存地址的
#define ABC 3;
#endif
#include "common.h"
//int a = 1;
int c = 3; //定义全局变量
/*********************
这样定义 c ,只会是局部变量定义, 出了{ } >>> c 就释放了
type xxx()
{
//如果再{ } 定义, 没再全局定义
//报错 extern int c; 未定义, 一定要再 { }定义一个 int c = 0;
int c =1;
}
*********************/
/*********************
可以再 { }局部 修改全局变量, 使得 c 可以各个 .cpp 使用 c 变量
type xxx()
{
c =199;
}
*********************/
#define ABC 3;
test123类
#pragma once
class test123
{
public:
test123();
~test123();
void GetInt();
void SetGoldInt();
};
#include "test123.h"
#include "common.h"
#include "stdio.h"
test123::test123()
{
}
test123::~test123()
{
}
void test123::GetInt()
{
printf("b:%p b:%d\n", &b, b);
printf("c:%p c:%d\n", &c, c);
}
void test123::SetGoldInt()
{
b = 1000;
c = 999;
}
test345类
#pragma once
class test345
{
public:
test345();
~test345();
void GetInt();
void SetGoldInt();
};
#include "test345.h"
#include "common.h"
#include "stdio.h"
test345::test345()
{
}
test345::~test345()
{
}
void test345::GetInt()
{
printf("b:%p b:%d\n", &b, b);
printf("c:%p c:%d\n", &c, c);
//printf("ABC:%p ABC:%d\n", &ABC, b);
}
void test345::SetGoldInt()
{
b = 100;
c = 99;
}
main
#include "common.h"
#include "stdio.h"
#include "test123.h"
#include "test345.h"
void main()
{
test123 test1;
test345 test2;
test1.GetInt();
test2.GetInt();
printf("===========================================\n");
printf("===========================================\n");
test1.SetGoldInt();
test1.GetInt();
test2.GetInt();
printf("===========================================\n");
printf("===========================================\n");
test2.SetGoldInt();
test1.GetInt();
test2.GetInt();
printf("===========================================\n");
getchar();
}