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.初始化和定义:静态数据成员定义时要分配空间,所以不能在类声明中定义。
静态成员函数:静态成员函数与类相联系,不与类的对象相联系。静态成员函数不能访问非静态数据成员。
- extern和static的理解
- 【static&extern】static和extern的区别
- const,static,extern 的理解
- static和extern的说明
- static和extern的区别
- static和extern的区别
- static和extern的区别
- static和extern 的区别
- static和extern的区别
- static和extern 的区别
- Extern和Static的区别
- static和extern的使用
- static和extern 的区别
- static和extern 的区别
- static和extern 的区别
- extern和static 的用法
- static和extern的总结
- static和extern 的区别
- PAT甲级1123
- docker学习之三docker常用命令
- Java8初体验(二)Stream语法详解
- java按像素压缩,生成压缩图片。
- LeetCode 112. Path Sum
- extern和static的理解
- 《深入理解java虚拟机》笔记——第四章 虚拟机性能监控与故障处理工具
- poj2441(状压dp)
- Java qq登录界面设计
- opencv3.2.0+CUDA8.0+Eigen3.0.5+VS2010+WIN7+x64环境部署
- 算法与数据结构【二】简单链表的实现
- 基类,继承类的初始化顺序
- MLlib-基本统计计算
- angularJs实现增删改查示例2-JS文件