当前位置: 首页 > 编程日记 > 正文

c语言中external,static关键字用法

static用法:

在C中,static主要定义全局静态变量、定义局部静态变量、定义静态函数。

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

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

3、定义静态函数:在函数返回类型前加上static关键字,函数即被定义为静态函数,其特点如下:

a.静态函数只能在本源文件中使用

b.在文件作用域中声明的inline函数默认为static类型

总结:用static定义的全局和局部静态变量的区别是,全局的静态变量的作用域和可见域都是从文件的定义开始到整个文件结束;而局部的静态变量可见域是从文件的定义开始到整个文件结束,作用域是从该语句块的定义开始到该语句块结束

extern的用法:

1、声明一个全局(外部)变量

当用extern声明一个全局变量的时候,首先应明确一点:extern的作用范围是整个工程,也就是说当我们在.h文件中写了extern int a;链接的时候链接器会去其他的.c文件中找有没有int a的定义,如果没有,链接报错;当extern int a;写在.c文件中时,链接器会在这个.c文件该声明语句之后找有没有int a的定义,然后去其他的.cpp文件中找,如果都找不到,链接报错。值得注意的一点:当extern语句出现在头文件中时,不要将声明和定义在一条语句中给出,也就是不要在头文件中写类似于这样的语句:

extern int a = 1;这种写法,在gcc编译时会给出一个警告:warning: ‘a’ initialized and declared ‘extern’

注意:external声明和定义的区别,定义只有一次,但是声明没有限制

int a;  —>定义,默认为0(等效于int a = 0;)

extern int a;  —>声明外部变量

extern int a = 1;  —>定义性声明(即在定义的同时声明为全局变量),一般不提倡

比如:

头文件a.h:

extern int a = 1;

头文件b.h:

#include “a.h”

源文件test.c:

#include “a.h”

#include “b.h”

这样肯定会报错:会报错说变量a重复定义

所有一般(提倡)的做法是:

只在头文件中通过extern给出全局变量的声明(即external int a; 而不要写成external int a = 1;),并在源文件中给出定义(并且只能定义一次)

比如:

头文件a.h:

源文件1.c:

#include “a.h”

int a = 0;  —>定义

头文件b.h:

extern int a;  —>声明

源文件2.c:

#include <stdio.h>

#include “2.h”

void print()

{

printf(“a = %d\n”, a);

}

源文件main.c

#include “1.h”

#include “2.h”

int main()

{

print();

return 0;

}

2、extern “C” { /用C实现的内容(通常写在另外的.c文件中)/ }

C++完全兼容C,当extern与“C”连用时,作用是告诉编译器用C的编译规则去解析extern “C”后面的内容。最常见的差别就是C++支持函数重载,而标准C是不支持的。如果不指明extern “C”,C++编译器会根据自己的规则在编译函数时为函数名加上特定的后缀以区别不同的重载版本,而如果是按C的标准来编译的话,则不需要。

static和external定义的全局变量区别:

注意:用static定义的全局静态变量可以被模块内所有的函数访问,但不能被模块外其他函数访问。而用external定义的全局

1、static修饰全局变量时,声明和定义是同时给出的;而extern一般是定义和声明分开,且定义只能一次

2、static的全局作用域只是自身编译单元(即一个.c文件以及这个.c文件所包含的.h文件);而extern的全局作用域是整个工程(一个工程可以包含很多个.h和.c文件)。即区别就在于“全局”的范围是整个工程,还是自身编译单元。

相关文章:

男神女神配——alpha阶段总结

一、需求分析 虽然公共社交网络系统能够满足大多数高校校园用户在校园网络社交的需求&#xff0c;但是针对校园学习、工作和文化生活等方面的支持以及学校个性化需求方面却存在不足。利用电子校务平台的数据&#xff0c;设计了与真实校园环境和活动紧密结合&#xff0c;包含具有…

正向代理和反向代理??

(5 条消息)正向代理 反向代理 本质区别&#xff1f; - 知乎 https://www.zhihu.com/question/36412304/answer/76804314 正向代理&#xff0c;只用于代理内部网络对Internet的连接请求&#xff0c;客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代…

虚幻引擎5(UE5)实时VFX游戏特效制作入门到精通

UE5 Niagara学习教程 课程获取&#xff1a;虚幻引擎5&#xff08;UE5&#xff09;实时VFX游戏特效制作入门到精通-云桥网 你会学到什么 我将通过创建各种各样的实时效果来教你虚幻引擎中强大的粒子系统。 我们将从简单的基础知识开始&#xff0c;然后逐渐地&#xff0c;我们将…

share extension 不显示_你所不知道的网红小酒馆Helens

当夜幕降临后&#xff0c;Helens小酒馆显示出她真正的魅力约上你的好友&#xff0c;来Helens体验一次穿越异国的饮酒之旅吧由美、中、泰设计师倾力打造&#xff0c;有着浓郁的东南亚异域style。木质的桌椅、精美的木雕装饰&#xff0c;每个细节都可以感受到不同文化的碰撞。别样…

怎么将jenkins打包后的war自动部署到jetty上?

1&#xff0c;使用maven的cargo插件&#xff0c;实现远程部署 &#xff08;官网描述地址&#xff1a;https://codehaus-cargo.github.io/cargo/JettyRemoteDeployer.html&#xff09; Maven中添加配置文件&#xff1a; Type: 可选参数有remote&#xff08;远程部署的模式&#…

自制青蛙跳台阶小游戏~

青蛙跳台阶小游戏 1、概念&#xff08;concept&#xff09;文档 楔子(Setting)&#xff1a;千百年来&#xff0c;人们在贬低别人时&#xff0c;常用井底之蛙来描述那个人&#xff0c;但这却让青蛙不开心了&#xff0c;于是青蛙决定跳出井底&#xff0c;为自己讨一个公道。 玩法…

提高性能的Varnish缓存方案

转载http://www.s135.com/post/313/arnish是一款高性能的开源HTTP加速器&#xff0c;挪威最大的在线报纸 Verdens Gang (http://www.vg.no) 使用3台Varnish代替了原来的12台squid&#xff0c;性能居然比以前更好。Varnish 的作者Poul-Henning Kamp是FreeBSD的内核开发者之一&am…

Python学习小甲鱼视频003

变量 变量名就类似于我们现实社会的名字&#xff0c;发一个值赋值给一个名字的时候&#xff0c;它会存储在内存中&#xff0c;称之为变量&#xff08;Variable&#xff09; 但是Python并没有将值存储在变量中&#xff0c;而更像是把名字贴在值上。或者说Python只有名字而没有…

虚幻引擎的数学知识学习教程 Math for Unreal Engine (Early Preview)

通过做真实世界的 Unreal Engine项目来学习数学 你会学到什么 理解游戏开发对数学的基本需求 将数学直接应用到用例中&#xff0c;而不是钻研理论(用我们的示例项目进行实践) 正确编辑短视频&#xff0c;节省您的时间 本课程涵盖向量数学、基础三角、叉/点积和四元数旋转 要求…

2016.4.2 动态规划练习--讲课整理

1.codevs1742 爬楼梯 时间限制: 1 s空间限制: 128000 KB题目等级 : 黄金 Gold题目描述 Description小明家外面有一个长长的楼梯&#xff0c;共N阶。小明的腿很长&#xff0c;一次能跨过一或两阶。有一天&#xff0c;他突发奇想&#xff0c;想求出从最低阶到最高阶共有几种爬楼梯…

matlab 通过矩阵变换使图像旋转平移_图像的几何变换

学习图像中的仿射变换(affine transform), 这是一种线性变换&#xff08;涵盖旋转&#xff0c;平移&#xff0c;错切(shear), 缩放等线性变换&#xff09;&#xff0c;既然是线性变换则可以通过线性变换&#xff08;矩阵&#xff09;来获得。仿射变换矩阵M为2*3的矩阵。仿射变换…

用伪代码模拟洗衣机的运转流程

今天的软导课又学到了不少“骚操作”&#xff0c;其中就包括Pseudocode和Top-down design。 不如现在就借着介绍洗衣机的运转流程向大家介绍一下这两个简单的东西。 题目如下 仔细观察您洗衣机的运作过程&#xff0c;运用Top-down设计方法和Pseudocode 描述洗衣机控制程序。 假…

使用 PHP 在站点上构建类似 Twitter 的系统

2019独角兽企业重金招聘Python工程师标准>>> 如果您曾经留意过&#xff0c;就会知道 Twitter 是 Web 2.0 世界最大的轰动事件之一。简单来说&#xff0c;Twitter&#xff08;Twitter.com 上提供的一个服务&#xff09;是一个简单的微博客服务&#xff0c;用户可以发…

Python中的变量以及赋值语句

列表的拷贝区别。 就是在Python中的任何的变量只是一个单纯的名字。名字只是数据的一个贴纸&#xff0c;名字可以来回的变动 赋值语句&#xff1a; 变量就像临时的“存储器”&#xff08;就像厨房中的锅碗瓢盆&#xff09;&#xff0c;它的强大之处就在于&#xff0c;我们在操…

UE4制作程序背景游戏 Make a game with Procedural Backgrounds in UE4

使用虚幻引擎4蓝图创建一个程序背景的游戏 你会学到什么 学习虚幻引擎4要领 使用程序切片创建标高 保存并加载某些游戏元素 创造一个无止境的跑步者角色 创建和完成游戏的良好习惯和实践 MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz 语言&#xff1a;英…

android pop3与imap方式接收邮件(javamail)

需要下载3个jar包&#xff1a;mail.jar/ activation.jar/ additionnal.jar 1.pop3/** * 以pop3方式读取邮件&#xff0c;此方法不能读取邮件是否为已读&#xff0c;已经通过测试 * */ private void getEmail() { List<Map<String, Object>> list new A…

什么是条件组合覆盖_物史政组合分析,新高考最终受益者丨选科17期

导读&#xff0c;规划物理历史政治是新高考33模式下存在的选科组合&#xff0c;为了给马上面临选科问题的高一、高二考生提供有效帮助&#xff0c;自主选拔在线选科模型解读第17期就来分析一下该组合的学科特性、适合人群、优势劣势、专业覆盖及往年选考情况。说明&#xff1a;…

进击时代!王雪红的谦卑与坚守

节前&#xff0c;HTC董事长王雪红发表了一封内部信&#xff0c;王雪红在心中表示&#xff0c;2015年&#xff0c;HTC不仅要在质量、创新能力与工作效率方面更进步&#xff0c;并表示&#xff0c;“我们未来企业成长的动能不仅包含智能手机&#xff0c;还会加入新的领域如RE、虚…

Python中的过滤器

寄语&#xff1a;新的有一天&#xff0c;开始了&#xff0c;让我们把内心的一些想法都放一放&#xff0c;努力去学习吧。 《Python基础教程&#xff08;第2版&#xff0c;修订版&#xff09;&#xff09;》 Assignment 赋值 Variable 变量 Nan是一种特殊的简写 not a numb…

UE4材质着色器全面学习教程

你会学到什么 通过所有着色器类型和设计的实际演示&#xff0c;学习创建材质 要求 对虚幻的基本理解会有所帮助 了解纹理的一般知识(不仅限于UE4)也很有用 描述 在这个系列中&#xff0c;我将带你设置大量不同的材料&#xff0c;教你如何以实用的方式使用虚幻4材料系统。我们…

codeforces #310 div1 C

操作无论是U还是L&#xff0c;都会使原图形分裂成两个图形&#xff0c;且两个图形的操作互不影响 我们又发现由于操作点只可能在下斜线上&#xff0c;如果将操作按x排序 那么无论是U还是L&#xff0c;都会将操作序列完整分割成两半&#xff0c;且两个操作序列互不影响 这样我们…

硬盘温度70度正常吗_70多岁老年人原来血压160,现在130正常吗?医生为你分析实情...

70多岁的老年人&#xff0c;原来有高血压&#xff0c;高压160左右&#xff0c;现在是130左右&#xff0c;正常吗&#xff1f;这个问题问的太过笼统&#xff0c;我们只好通过这个问题&#xff0c;来分享一些老年高血压患者血压控制的一些知识点&#xff0c;希望能够对老年人的高…

使用python愉快地做高数线代题目~

今天接触到了python&#xff0c;发现真是极易上手啊&#xff01;对比c语言是什么鬼东西 诶&#xff0c;等下&#xff0c;看完教学文章发现TA在下面写了这句话 如果做了前面的内容你可能已被吸引了&#xff0c;觉得c语言真的是废材! 不。。。不是的。。。python 基础库几乎都…

Docker总结

2019独角兽企业重金招聘Python工程师标准>>> 查看docker的子命令&#xff0c;直接敲docker或完整的docker help就可以了: bash-3.2$ docker Usage: docker [OPTIONS] COMMAND [arg...] A self-sufficient runtime for linux containers. Options:-D, --debugfalse …

Python中的对象,类,super()函数

对象&#xff1a;&#xff08;1&#xff09;外观的特征 &#xff08;2&#xff09;正在做的事情 比如&#xff1a;那个穿蓝色衣服的正在打球的帅哥 类&#xff1a;属性&#xff08;静态的变量&#xff09;方法&#xff08;函数&#xff09;是对对象的近似 类名约定是以大写字…

Blender赛车动画制作学习教程 Learn Race Car Animation with Blender

使用Blender 2.93创建您自己的惊人汽车动画 你会学到什么 Blender的界面和导航 建模 UV制图 材料 动画 照明设备 渲染 合成 要求 下载并安装Blender。免费下载和免费用于任何目的。 MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz&#xff0c;2 Ch 语言&…

数据结构-线性表的顺序结构

1 #include "stdio.h"2 #include "stdlib.h"3 4 typedef int ElemType; //线性表存储基本类型5 typedef int Status; //基本操作函数类型6 #define LIST_INT_SIZE 50 //线性表初始化存储空间分配量7 #define LISTINCREMENT 10 //线…

项目背景怎么描述_课程游戏背景下幼儿户外活动的组织和实施 ——记岱山县课程项目实施组活动...

课程游戏背景下幼儿户外活动的组织与实施——记岱山县课程项目实施组活动为了深入推进园本化课程实施的实践与研究&#xff0c;加强项目组幼儿园课程的建设与实施&#xff0c;提升项目组幼儿园课程质量。11月23日&#xff0c;县课程项目实施组活动在东沙镇中心幼儿园开展。本次…

兔子生兔子递归的理解

重要的是找规律&#xff01; 古典问题&#xff1a;有一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子&#xff0c;小兔子长到第三个月后每个月又生一对兔子&#xff0c;假如兔子都不死&#xff0c;问每个月的兔子总数为多少&#xff1f; 月份 兔子对数 1 …