【C++】static

server/2024/10/18 19:22:00/

C中的static

说起static,一般想到它的作用是延长变量的生命周期,如果只是这样那么它跟全局变量有什么区别呢?
在C++之前,C语言就有static了,C的static作用很简单,就是不让其他文件的访问自己的全局变量。
C中,我可以用extern来获取其他.c文件定义的全局变量,而static就是让变量对其他文件不可见,有点类似c++的private。

//file1.c
int a = 5;	//
static b = 6;//main.c
extern int a;
extern int b;	//会导致链接错误	

题外话:强符号与弱符号

.c中 初始化的全局变量是强符号,未初始化的全局变量是弱符号。
强符号只能有一个,弱符号可以有多个,弱符号可以有多个。
链接器在确定符号时,如果只有弱符号,则会选择弱符号。弱符号因为没有初始化,所以会初始化为0
如:

//glb.c
int glb = 5;
//main.c
int glb;	//弱符号
...
printf("%d", glb);	//输出为5

实际实验发现MSVC中 glb.c和main.c可以通过编译。但是gcc会报符号重复定义的错误。但是gcc中允许 int glb=5; int glb;同时出现在一个文件中,也就是说强弱符号在一个.c文字中是可以的
__attribute(weak)可以强制将符号转为弱符号

题外话:extern

前面说static时,用到了extern来让当前.c可以看见其他.c文件的全局变量,可以说extern int a; 就是全局变量的声明。
其实在C中extern就是用来声明外部接口。如果你在.h中添加了函数声明,编译器默认会为函数声明添加extern

C++中的static

在mian函数执行前初始化


http://www.ppmy.cn/server/104402.html

相关文章

Java编程:单一职责原则

单一职责原则(SRP)在面向对象设计领域占据核心地位,它是SOLID五大原则的关键一环。 这些原则共同目的是提升软件的易维护性和扩展性。 按照SRP,每个类的构建应专注于一个变化因子。 在软件工程实践中,单一职责原则作为…

数据库机器上停service360safe

发现有个数据库的负载较高,发现有360safe,就准备停了该服务再观察 [rootdb1 ~]# ps -ef |grep 360 root 970 1 0 15:12 ? 00:00:10 /opt/360safe/360entclient root 976 970 5 15:12 ? 00:18:42 /opt/360…

RAII在实现webserver这个项目中是怎么体现的?起到了什么作用

在WebServer项目中,RAII(Resource Acquisition Is Initialization,即资源获取即初始化)是一种重要的资源管理策略,它主要通过智能指针、锁、文件句柄等对象的生命周期来管理资源的分配和释放。RAII在WebServer项目中的…

网络编程Day9_IO多路复用 20240821

运行1个服务器和2个客户端实现效果: 服务器和2个客户端互相聊天,服务器和客户端都需要使用select模型去实现 服务器要监视2个客户端是否连接,2个客户端是否发来消息以及服务器自己的标准输入流 客户端要监视服务器是否发来消息以及客户端自…

[mongodb][查询]MongoDb 模糊查询

模糊查询 {name:/HLCSOU17649/i}时间查询 {date:{"$gte":ISODate("2019-11-27T00:00:00Z"),"$lte":ISODate("2019-11-28T00:00:00Z")}}组合查询 {date{"$gte":ISODate("2019-11-27T00:00:00Z"),"$lte":…

Android 安卓Compose软键盘和Activity页面的协调处理问题

文章目录 问题展示1、输入框展示不完整,且布局被顶出屏幕外2、输入框被软键盘完全覆盖 解决方案最终演示 问题展示 1、输入框展示不完整,且布局被顶出屏幕外 这是默认处理的样式 2、输入框被软键盘完全覆盖 当在AndroidManifest.xml Activity标签上加…

Maven 管理依赖的详细步骤

1. 基本依赖管理&#xff1a; a. 在项目根目录创建 pom.xml 文件&#xff08;如果不存在&#xff09; b. 在 pom.xml 的 标签内添加依赖&#xff1a; <project><!-- 其他配置 --><dependencies><dependency><groupId>org.example</groupId&…

【标准知识】航天产品设计文件编号

按照QJ 1714-2011《航天产品设计文件管理制度》&#xff0c;梳理一下设计文件的编号要求。 01 设计文件 按照QJ 1714的规定&#xff0c;设计文件是由设计部门编制的&#xff0c;用以规定产品的组成、型式、结构尺寸、技术要求、原理以及制造、调试、试验、验收、使用、维护、…