限制作用域和保持状态

‌函数static的作用主要体现在限制作用域保持状态两个方面。‌‌1

限制作用域

  1. ‌静态全局变量‌:在全局变量前加上static关键字,该变量就被定义成为一个静态全局变量。这种变量只在定义该变量的源文件内有效,无法被其他源文件中的函数访问,从而避免了全局变量在不同源文件间引起的冲突。
  2. ‌静态函数‌:使用static修饰的函数只能在声明它的文件内部被调用,无法被其他文件中的函数调用。这有助于将一些辅助函数或实用函数限制在特定文件中,避免污染其他文件的作用域。

保持状态

  1. ‌静态局部变量‌:在一个函数中,由static修饰的局部变量在函数调用结束之后不会被销毁,而是保存原值继续存在。这使得静态局部变量在多次调用中能够保持状态,常用于记录函数调用次数或记录某个状态变化的场景。

具体应用场景

  • ‌静态全局变量‌:适用于需要在多个函数间共享数据,但又不想让这些数据在全局范围内可见的情况。例如,在一个大型项目中,某些配置信息或状态标志可以通过静态全局变量在不同的模块间共享,而不会引起命名冲突。
  • ‌静态函数‌:适用于一些辅助功能或实用功能,这些功能不需要在其他文件中被调用。通过将它们定义为静态函数,可以避免它们被误用,保持代码的清晰和模块化。
  • ‌静态局部变量‌:常用于需要记录函数调用次数或状态变化的场景。例如,在一个计数器函数中,使用静态局部变量来记录调用的次数,这样每次调用时都会增加计数器的值,而不是每次都从0开始。

函数static的作用的更多相关文章

  1. 成员变量和成员函数前加static的作用?

    成员变量和成员函数前加static的作用?答:它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数.分别用来反映类的状态.比如类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作 ...

  2. static的作用

    在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条. (1)先来介绍它的第一条也是最重要的一条:隐藏. 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有 ...

  3. IOS 本地推送 IOS10.0以上 static的作用 const的作用

    //需要在AppDelegate里面启动APP的函数 加上 UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNot ...

  4. C/C++中static关键字作用总结

    来来来,来看这篇文章: http://www.cnblogs.com/biyeymyhjob/archive/2012/07/19/2598815.html 总结一下: 1.先来介绍它的第一条也是最重 ...

  5. C++中static关键字作用总结

    1.先来介绍它的第一条也是最重要的一条:隐藏.(static函数,static变量均可) 当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性.举例来说明.同时编译两个源文件 ...

  6. 【C/C++】C/C++中Static的作用详述

    在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条. ❶先来介绍它的第一条也是最重要的一条:隐藏.当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可 ...

  7. C语言中static的作用及C语言中使用静态函数有何好处

    转自:http://www.jb51.net/article/74830.htm 在C语言中,static的作用有三条:一是隐藏功能,二是保持持久性功能,三是默认初始化为0. 在C语言中,static ...

  8. C、C++ static 的作用

    1.隐藏 当同时编译多个文件时,所有未加static关键字的全局变量和函数都具有全局可见性. 例如:同时编译两个源文件 //ghz.c #include <stdio.h> char a ...

  9. C语言中的static的作用?

    在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条. (1)第一个作用:隐藏. 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性.为理解这句话 ...

  10. C 语言中 static 的作用

    在 C 语言中,static 的字面意思很容易把我们导入歧途,其实它的作用有三条. (1)先来介绍它的第一条也是最重要的一条:隐藏 当我们同时编译多个文件时,所有未加 static 前缀的全局变量和函 ...

随机推荐

  1. 常用js 函数

    过滤对象空值   removeEmptyValues(obj) {                         for (const key in obj) {                   ...

  2. 前端每日一知之BFC

    脑图在线链接 本文内容依据[js每日一题]公众号精彩文章总结而来

  3. angr-ctf

    angr 的项目地址 https://github.com/jakespringer/angr_ctf angr实战 00 拖到IDA 就是输入正确的指令才能通关 这次试一下用angr来解题 goah ...

  4. docker-compose开机自启动设置

    vi /etc/rc.d/rc.local /usr/local/bin/docker-compose -f /home/seafile/docker-compose.yml up -d 给rc.lo ...

  5. idea properties文件乱码解决

    ​java文件是好的,但是遇到properties文件,默认就成了iso制式乱码了. 虽说不影响程序执行,但是看起来真的让人心烦. 问题点是出在properties文件是GBK的,需要单独设置一下. ...

  6. aspirate 工具

    dotnet tool aspirate https://www.nuget.org/packages/aspirate/0.1.40-preview 作为全局工具安装 dotnet tool ins ...

  7. k3d 入门:在 Docker 中运行 k3s

    k3d 入门:在 Docker 中运行 k3s https://www.xtplayer.cn/k3d/introduction-k3d-run-k3s-docker-src/#The-"S ...

  8. 用 erlang 描述 tcc

    Transaction 视为一个 Actor. start_transaction(Order) -> p1 = spawn(start_order(self, Order.subOrder1) ...

  9. 【JavaWeb】【Cookie】通过Cookie记录用户上次登陆时间并判断用户是否是首次登陆

    通过Cookie记录用户上次登陆时间并判断用户是否是首次登陆 Cookie类的构造方法 public Cookie(java.lang.String name,java.lang.String ) 1 ...

  10. Docker 部署数据可视化 Superset 3.0.0 深度汉化并配置元数据存储为 Postgres

    services: postgres: image: postgres:14.10 container_name: postgres hostname: postgres environment: P ...