77百科网
当前位置: 首页 生活百科

static用法c语言(最全面详实的Static应用)

时间:2023-06-29 作者: 小编 阅读量: 1 栏目名: 生活百科

在C程序开发过程中,很多人都忽视了静态变量和静态函数重大作用。静态类型根据static修饰的对象,可分为两大类:在函数前面的和在变量前面的。建议要这样的函数前要加static,表明此函数的作用范围是本文件,也只能在本文件中使用,当然头文件中也是不能出现这个函数申明的,否则会报错。现在我们在add前面加上static试试。同一项目中的不同文件含有同名静态变量允许存在,其作用域与静态函数一致。

在C程序开发过程中,很多人都忽视了静态变量和静态函数重大作用。笔者就遇到一位资深程序员,看到我写的代码里有static标识,很好奇,我告诉他后,他立马用到他程序里面了~~。

静态类型

根据static修饰的对象,可分为两大类:在函数前面的和在变量前面的。

1. 放在函数前面

在实际项目中,我们经常会定义这样一些小函数,它们只被定义他们的那个文件里的其它函数调用,而不会被其它文件里的函数调用,即局部函数。建议要这样的函数前要加static,表明此函数的作用范围是本文件,也只能在本文件中使用,当然头文件中也是不能出现这个函数申明的,否则会报错。

来看一个例子,同一个项目包含file1.c和file2.c

//file1.c中

int add(int x, int y) { return (x y); } void int funFile1(void) { return add(1, 2); }

//file2.c中

float add(float x, float y) { return (x y); } void float funFile2(void) { return add(1.1, 2.1); }

很明显,编辑时会报add函数重复定义的错误。现在我们在add前面加上static试试。

//file1.c中

static int add(int x, int y) { return (x y); }

//调用本文件中static函数

void int funFile1(void) { return add(1,2); }

//file2.c中

static float add(float x, float y) { return (x y); }

//调用本文件中static函数

void float funFile2(void) { return add(1, 2); }

编辑通过,完全正确。说明在同一个项目中,不同文件中含有相同名字的static函数是允许的。这个功能在多人合作的大项目中,特别有用,只要大家定义好接口函数,可以极大的避免同文件名的错误。

2.放在变量前面

分在函数内和在函数外两种情况,关于static变量在内存中的位置,详见关于内存堆栈

2.1 函数内的static变量

函数内的static变量只能被本函数调用,其特点是只能被初始化一次,而且,退出函数后其值会保持,限于函数内的“全局”变量.

//每调用一次,val值增1 void int getCount(void) { //编辑时完成初始化值为1 static int val=1; val; return val; }

2.2 函数外的static变量

定义在函数外的static变量只能被本文件中的函数使用,不能被其它文件使用。来看例子,同一个项目包含file1.c和file2.c

//file1.c

//编辑时完成初始化值为1//与file2中的val没关系 static int val=1; void int incCount(void) { val; return val; }//静态函数 (限file1.c) static void int decCount(void) { val--; return val; }

//file2.c

//编辑时完成初始化值为10//与file1中的val没关系 static int val=10; void int inc(void) { val; return val; }//静态函数 (限file2.c) static void int decCount(void) { val--; return val; }

编译通过,完全正确。同一项目中的不同文件含有同名静态变量允许存在,其作用域与静态函数一致。

码字不易,谢谢关注,你的点赞是我最大的动力。共享知识,共同成长!

    推荐阅读
  • 夜钓蓝光灯伤害眼睛(钓鱼灯蓝光到底伤不伤眼睛)

    最近老是有钓友在我私信里问我,钓鱼灯的蓝色灯光到底伤不伤眼睛,我们晚上夜钓用灯的时候需不需要佩戴商家宣传的防蓝光眼镜。2021年市场监管局曾经,对5个电商平台的72个批次的热销防蓝光设备进行了专项监督抽查,价格从29.9元到1130元不等,经过检测结果发现,其中有19个批次的产品不合格。这还是专业的防蓝光设备,那我们商家口中的钓鱼眼镜就可想而知了。

  • 三十年结婚纪念日(三十年结婚纪念日)

    今天九月十八,是我和妻子结婚三十周年纪念日。三十年婚姻俗说珍珠婚。在西方传说中,在古印度诸神里,在波斯神话中,珍珠是露水和眼泪幻化而成,而中国民间有"千年蚌精,露滴成珍”之传说。是缘,走在了一起。今天,我照佛教的三句义,对我的妻子说三句话:缘如来说我俩是夫妻,不是夫妻,我俩就是夫妻!

  • 采莲曲的诗意(采莲曲原文翻译)

    下面内容希望能帮助到你,我们来一起看看吧!采莲曲的诗意译文:采莲少女的绿罗裙融入到田田荷叶中,仿佛一色,少女的脸庞掩映在盛开的荷花间,相互映照。混入莲池中不见了踪影,听到歌声四起才觉察到有人前来。乱入池中看不见,闻歌始觉有人来。

  • 怎么杀死土壤里的虫子(如何杀死土壤里的虫子)

    干的红辣椒一份,用25倍的水煮开半小时,过滤后的喷洒枝叶,可以防治蚜虫,红蜘蛛。将枫杨枝叶洗净捣烂,埋入土里,防地老虎和蝼蛄。核桃的枝叶、果皮等一种或多种洗干净,捣烂,加入15倍的水浸泡24小时,喷洒盆花的枝叶上,防治蚜虫、金针虫等。大蒜、生姜或花椒一种或多种捣烂,加20倍的水浸泡12小时,用滤液喷洒,防蚜虫、红蜘蛛等害虫以及叶斑病、黑褐斑等病害。

  • 2022南昌县中考生基本信息、加减分查询入口

    关于发布中考考生类别素质考评均衡资格加减分等基本信息或得分的公告各初级中学、广大考生、家长:现将2022年初中三年级学业水平考试(中考)考生类别、素质考评、均衡资格、加减分等基本信息或得分予以公布,若考生对以上关键信息或得分确有异议,务必于6月26日前向学校反馈核实,学校核实后统一于27日到南昌县教育考试中心集中查询,28日前反馈到学校及学生。

  • 瑜伽怎样开胯(瑜伽开胯方法)

    瑜伽怎样开胯要经常做蝴蝶式练习。束脚式体式与蝴蝶式比较接近,区别在于蝴蝶式的基础上,练习过程中要将上半身向上延伸后再往前倾,直至额头或下颌触碰垫子上。注意练习过程中,大腿与小腿要保持直角,身体与大腿之间同理直角。注意练习过程遵循“顺序渐进”的原则,听从自己身体的指引,切不可生拉硬扯,以免受伤。

  • 深冬渐冷爱车怎么办(小寒到大寒至该给爱车)

    随着小寒的到来,标志着开始进入一年中最寒冷的日子。此外,寒冷冬季还要注意车辆的轮胎情况,尤其小寒过后,雨雪天气势必会增加,路面上冻增加了行车过程中出现的打滑、溜车风险,注意检查、更换合适的轮胎,才能为出行安全更添一份保障。在京东汽车还有更多适用不同汽车型号的冬季轮胎,全面满足广大车主的不同需求。天寒地冻,穿衣保暖,寒潮涌来,快在京东汽车挑选保暖神器,让冬季出行更暖心。

  • 微信新功能拍一拍怎么关闭(微信新功能拍一拍介绍)

    下面更多详细答案一起来看看吧!微信新功能拍一拍怎么关闭微信新功能拍一拍这个功能是不能取消的,一旦更新,就是强硬植入的。想要不使用这个功能,唯一的方法就是微信不要更新。双击好友头像或者自己头像都可以,群或单独的聊天对话皆可,双击完头像后会出现你拍了拍xxx,但对方不会收到明显的提示。

  • 鲜花怎么存放(保存鲜花的方法介绍)

    以下内容希望对你有帮助!鲜花怎么存放保鲜鲜花的时候可以把花枝底部修剪一下,下部分多余的叶子剪除,把它插到装水的瓶子里面,及时的更换清水就行。想要让鲜花保鲜的时间更长,可在水中加些啤酒,或者是加些鲜花保鲜剂,都可以给花枝提供营养。此外,加入少量的食糖或是食盐,也可以很好的保持花卉的新鲜度。

  • 兰花怎么养才能长得更大(掌握室内养兰6要素)

    掌握室内养兰“6要素”,再难养的兰花也不烂根,长势好年年开花,下面我们就来聊聊关于兰花怎么养才能长得更大?兰花怎么养才能长得更大掌握室内养兰“6要素”,再难养的兰花也不烂根,长势好年年开花兰花在养花界算是一种比较高雅的植物,不开花赏叶,开花不赏花,各个层次都有不同的美,好多人都想去养兰花,但是往往都养不好它,其实是没有掌握好基本的养护方法。浇水的时候吹上一两个小时,平常多开窗,都能保证不烂根烂叶。