extern和static的理解

来源:互联网 发布:数据挖掘入门 编辑:程序博客网 时间:2024/05/01 07:02

extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量或函数时,在其它模块中寻找其定义。

我们要在文件1中定义了一个变量,而在文件2中需要用到,这该怎么办?

只需要在使用时在变量前面加上extern即可,提示编译器这是从另一个文件中分拿出来的变量。不过这里需要注意一点,这里的变量只能声明,不能给他初始化。

//file1.c#include <stdio.h>int A;//在file1.c里定义了一个变量int func1(){...}/***************************************///file2.cextern A;//声明A为一个已经定义的外部变量extern A=0;//错误int func2(){}

static的作用和extern正好是相对的。在C中,static主要定义全局静态变量、定义局部静态变量、定义静态函数。

我们要是在文件1中定义一个变量,又不想让其在其他文件中使用,咋办?

只要在定义变量的时候,前面加上static即可。

//file1.cstatic int A;//静态全局变量,作用域只限于在本文件中int func(){...}//file2.c//由于file1.c里面定义的A为static类型,因此即使在此声明A为extern外部变量,仍然不能享有此资源--file1.c里的A变量.extern int A;func2(){...}

1、定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量,每一次值得修改都会保留结果。全局静态变量有以下特点。
a.在全局区分配内存。
b.如果没有初始化,其默认值为0.
c.该变量在本文件内从定义开始到文件结束可见。

2、定义局部静态变量:在局部变量前面加上关键字static,其特点如下:
a.该变量在全局数据区分配内存。
b.它始终驻留在全局数据区,直到程序运行结束。
c. 其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束。

3、定义静态函数:在函数返回类型前加上static关键字,函数即被定义为静态函数,其特点如下:
a.静态函数只能在本源文件中使用
b.在文件作用域中声明的inline函数默认为static类型

在C++中stati又增加了两个作用:

定义静态数据成员:
a.内存分配:静态数据成员在程序的全局数据去分配。
b.初始化和定义:静态数据成员定义时要分配空间,所以不能在类声明中定义。

静态成员函数:静态成员函数与类相联系,不与类的对象相联系。静态成员函数不能访问非静态数据成员。

0 0
原创粉丝点击