当前位置: 首页 > news >正文

C、C++ static 的作用

 1、隐藏

 当同时编译多个文件时,所有未加static关键字的全局变量和函数都具有全局可见性。

例如:同时编译两个源文件

//ghz.c
#include <stdio.h>
char a = 'g';
void GHz(){
    printf("I'm GHz\n");
}
//main.c
#include <stdio.h>
#include <stdlib.h>

int main()
{
    extern char a; //引用已声明变量
    printf("%c\n",a);
    GHz();
    return 0;
}

输出:

如果加了static,ghz.c文件就会对其它源文件隐藏。例如在a和GHz的定义前加上static,main.c就看不到它们了。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏。

2、记忆功能和全局生存期

存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。存储在静态数据区的变量有两种,一种是全局变量,另外一种即static修饰的静态变量,只不过静态变量和全局变量比起来静态变量能够控制变量的可见范围(如果static变量声明在函数内部作为局部变量,那么它的生存期为整个源程序,但是它和自动变量的作用域一样,只能在定义该变量的函数内使用)

例:

#include <stdio.h>
#include <stdlib.h>
int f(int *p)
{
    static int j =0;
    p[j++] += 1;
    p[j++] += 1;
    return 0;
}
int main()
{
    int a[5] = {1,2,3,4,5};
    int i = 0;
    for(i = 0; i < 2;i++)
        f(a);
    for(i = 0; i < 5; i++)
        printf("%d ",a[i]);
    return 0;
}

输出:

 

转载于:https://www.cnblogs.com/GHzz/p/8540247.html

相关文章:

  • Java集合--整体框架
  • 从伪并行的 Python 多线程说起
  • 练习一 第三题
  • 【译】PHP简洁之道
  • 第4届CSS大会3月31日相约厦门,与行业CSS专家面对面
  • 阿里盒马领域驱动设计实践
  • 大陆集团推出全新电子制动方案,全力保障高度自动驾驶安全
  • bootstrap4简单使用和入门01-简单表单的使用
  • 集合框架学习(目录总贴,待更新。。。)
  • Masonry适配
  • 【BZOJ】1086: [SCOI2005]王室联邦
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • vuex入门
  • zookeeper集群的安装
  • Godot-3D教程-02.3D性能和局限性
  • 【技术性】Search知识
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • android 一些 utils
  • es6
  • HTTP中GET与POST的区别 99%的错误认识
  • JS函数式编程 数组部分风格 ES6版
  • redis学习笔记(三):列表、集合、有序集合
  • Ruby 2.x 源代码分析:扩展 概述
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 想写好前端,先练好内功
  • 怎么将电脑中的声音录制成WAV格式
  • 正则表达式
  • Android开发者必备:推荐一款助力开发的开源APP
  • Spring第一个helloWorld
  • UI设计初学者应该如何入门?
  • 数据库巡检项
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (1)常见O(n^2)排序算法解析
  • (8)STL算法之替换
  • (C)一些题4
  • (C语言)fread与fwrite详解
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (三)docker:Dockerfile构建容器运行jar包
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • .NET delegate 委托 、 Event 事件,接口回调
  • .net实现客户区延伸至至非客户区
  • .NET文档生成工具ADB使用图文教程
  • .net中生成excel后调整宽度
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • @transaction 提交事务_【读源码】剖析TCCTransaction事务提交实现细节
  • []C/C++读取串口接收到的数据程序
  • [17]JAVAEE-HTTP协议
  • [20180224]expdp query 写法问题.txt
  • [C++基础]-入门知识