c/c++中extern用来声明全局变量
来源:互联网 发布:唐嫣紫霞仙子 知乎 编辑:程序博客网 时间:2024/06/18 04:45
C/C++中的变量分为全局变量、静态全局变量、局部变量和静态局部变量,在《C/C++中静态局部变量的特点与应用》中我们介绍过静态局部变量,今天我们的目标是全局变量。
单个文件中的全局变量
简单一点说,全局变量就是在函数外面定义的变量,下面是一个最简单的实例,一共定义了两个int型的全局变量a和b,这两个全局变量定义的位置不大相同,a定义在函数fun1之前,而b定义在之后,a和b都定义在函数main之前,从使用情况看全局变量a可以在其后面的所有函数中使用,而全局变量b只能在函数main中使用,不能在其定义之前的函数fun1中使用。因此,我们可以得出这样的结论:全局变量的作用域为其定义位置开始,至文件结尾,也即只有文件作用域。
#include “stdio.h”
int a = 1; //这就是个全局变量啦
void fun1() //这个函数只能使用全局变量a,不能用b
{
a++;
printf(“a=%d\n“,a);
}
int b = 2; //这也是个全局变量
void main() //这里a b都可以用
{
fun1();
a++;
printf(“a=%d,b=%d\n“,a,b);
getchar();
}
让全局变量在多个文件中有效
前面讲过,全局变量的作用域起始于定义的地方直到文件结尾,那岂不是就没法在其他文件中使用了啊。从C/C++现在NB的程度上看,这个事情是不可能的,要是这样那还了得。为了使全局变量的作用域扩大到多个文件中,C++中提供了extern关键字。
下面实例代码中的extern int g_c;是做一个声明,说这个变量g_c是一个全局变量啊,你们随便用,g_c本身在其他文件中定义(在本文件中定义也可以,不过要保证其他文件中没有定义过),这样就将全局变量的作用域扩大到多个文件了。
全局变量只要在一个文件中定义后,在其他需要使用的源文件中只要使用extern关键字,即可在该文件中使用,概括下就是:extern扩展全局变量的作用域
#include “stdio.h”
extern int g_c; //声明这是一个外部全局变量
int g_a = 1; //全局变量
void fun1()
{
g_a++;
printf(“g_a=%d,g_c=%d\n“,g_a,g_c);
}
int g_b = 2; //全局变量
void main()
{
fun1();
g_a++;
printf(“g_a=%d,g_b=%d,g_c=%d\n“,g_a,g_b,g_c); //这里直接就用上g_c了
getchar();
}
上做了一点小小的更改,把所有的全局变量全部加上g_前缀,用以表示这是一个全局变量。
限制全局变量只能在一个文件中有效
刚才好不容易才把全局变量的作用域扩展到多个文件了,干嘛现在又要限制呢?这是因为虽然全局变量定义后不使用extern关键字的话只能在本文件中使用,但是如果你在其他文件中定义同样名字的全局变量的话,那是不允许滴(在链接的时候会出错),至于详细原因以后再说。
为了能够实现在不同的文件中使用相同名字的全局变量,static关键字就派上用场了,在C/C++中静态局部变量的特点与应用中我们已经说过static关键字了,用static修饰的局部变量只能在定义变量的函数中使用,那么用static修饰的全局变量也就只能在定义其的文件中使用了,这就是传说中的静态全局变量。
extern int g_c; //其他文件中定义的全局变量
static int g_a = 1; //静态全局变量 限本文件中使用
void fun1()
{
g_a++;
printf(“g_a=%d,g_c=%d\n“,g_a,g_c);
}
int g_b = 2; //全局变量
void main()
{
fun1();
g_a++;
printf(“g_a=%d,g_b=%d,g_c=%d\n“,g_a,g_b,g_c);
getchar();
}
通过static修饰后,我们就可以在不同的文件中使用相同名字的全局变量而不会出现链接错误了。
- c/c++中extern用来声明全局变量
- c/c++中extern用来声明全局变量
- c/c++中extern用来声明全局变量
- c/c++中extern用来声明全局变量
- c++中extern用来声明全局变量
- C - extern声明辨析
- c语言中extern和static修饰的全局变量
- c语言中static extern register以及全局变量的细节
- 51单片机 C语言中全局变量的使用extern
- extern“C”声明的作用
- C语言extern声明辨析
- C语言extern声明辨析
- C语言H-声明extern
- C语言extern声明辨析
- extern“c”声明的作用
- ios extern 声明全局变量
- 关于C语言中extern声明外部…
- C中全局变量和函数声明的认识
- assert()函数用法总结
- Android中Service与Thread的区别
- Ubuntu10.04制作官方源镜像以及搭建本地
- LSI设计(2)布局算法(待上载)
- 3天学习haskell---haskell第二天
- c/c++中extern用来声明全局变量
- LSI设计(3)布线算法(待上载)
- Java上路19-I/O-常用类
- LSI设计(4)FOCR快速最优通道布线
- 博弈进行时~
- Visual Studio 2005各试用版官方下载地址 .
- LSI设计(5)崎岖通道最优布线
- 讲解MySQL索引的概念及数据库索引的应用
- SQL server 容易让人误解的问题之 聚集表的物理顺序问题