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

C语言中常见关键字(static,extern)

一、static的使用

主要是身体擦

在C语言中,static关键字可以用于修饰全局变量局部变量,但其作用不同。以下是详细的说明和示例:


1. static修饰全局变量

static用于修饰全局变量时,它会限制该变量的作用域,使其仅在定义它的源文件内可见。其他源文件无法访问该变量。

特点:
  • 作用域:仅限于定义它的源文件(文件作用域)。

  • 生命周期:与程序的生命周期相同(静态存储期)。

  • 链接性:内部链接(internal linkage),其他文件无法通过extern声明访问。

示例:

c

复制

// file1.c
#include <stdio.h>

static int globalVar = 10;  // 静态全局变量,仅在file1.c中可见

void printGlobalVar() {
    printf("GlobalVar: %d\n", globalVar);
}

// file2.c
extern int globalVar;  // 错误:无法访问file1.c中的static全局变量

int main() {
    printGlobalVar();  // 输出: GlobalVar: 10
    return 0;
}

2. static修饰局部变量

static用于修饰局部变量时,它会改变该变量的存储期(生命周期),使其从自动存储期(函数调用结束后销毁)变为静态存储期(程序运行期间一直存在)。此外,static局部变量只会被初始化一次。

特点:
  • 作用域:仅限于定义它的函数或代码块(局部作用域)。

  • 生命周期:与程序的生命周期相同(静态存储期)。

  • 初始化:只初始化一次,后续函数调用会保留上一次的值。

示例:

c

复制

#include <stdio.h>

void func() {
    static int count = 0;  // 静态局部变量
    count++;
    printf("Count: %d\n", count);
}

int main() {
    func();  // 输出: Count: 1
    func();  // 输出: Count: 2
    func();  // 输出: Count: 3
    return 0;
}

3. static修饰全局变量和局部变量的对比

特性static全局变量static局部变量
作用域仅限于定义它的源文件(文件作用域)仅限于定义它的函数或代码块(局部作用域)
生命周期整个程序运行期间(静态存储期)整个程序运行期间(静态存储期)
初始化在程序启动时初始化一次在第一次调用时初始化一次,后续调用保留值
链接性内部链接(其他文件无法访问)无链接性(仅限于函数内部)
典型用途隐藏全局变量,避免命名冲突在函数调用之间保留状态

4. 总结

  • static全局变量:用于限制全局变量的作用域,避免其他文件访问,增强模块化。

  • static局部变量:用于在函数调用之间保留状态,延长局部变量的生命周期。

2、extern的使用

使用extern声明变量

当你有一个全局变量定义在一个文件中,并希望在另一个文件中访问它时,你可以使用extern来声明它。

示例

假设你有两个文件:file1.c 和 file2.c

file1.c

 

c复制代码

#include <stdio.h>
// 定义全局变量
int globalVar = 10;
void printGlobalVar() {
printf("Global variable in file1.c: %d\n", globalVar);
}

file2.c

 

c复制代码

#include <stdio.h>
// 声明全局变量(使用extern)
extern int globalVar;
void modifyGlobalVar() {
globalVar = 20;
}
int main() {
printGlobalVar(); // 调用file1.c中的函数
modifyGlobalVar();
printf("Global variable in file2.c after modification: %d\n", globalVar);
return 0;
}

在这个例子中,file1.c 定义了一个全局变量 globalVar 和一个函数 printGlobalVarfile2.c 使用 extern 声明了 globalVar,这样它就可以访问和修改这个变量。


文章转载自:

http://hCn1XPIc.wdjcr.cn
http://idoZCnNV.wdjcr.cn
http://cQHRcHvN.wdjcr.cn
http://L4au40v3.wdjcr.cn
http://9rTHEVjb.wdjcr.cn
http://vh5ojyWl.wdjcr.cn
http://y8lzF8Dz.wdjcr.cn
http://eUvCFOpK.wdjcr.cn
http://vJfaC78w.wdjcr.cn
http://sPqYdmBk.wdjcr.cn
http://Rjsa5EKg.wdjcr.cn
http://qjInsT9J.wdjcr.cn
http://JWTMJkIn.wdjcr.cn
http://BBsvESN7.wdjcr.cn
http://hQ0ivMTF.wdjcr.cn
http://Q3kb2pN0.wdjcr.cn
http://GS6yKGcy.wdjcr.cn
http://eKtD7l22.wdjcr.cn
http://xAc7iQ7J.wdjcr.cn
http://ojGIZmje.wdjcr.cn
http://0AwtLtfN.wdjcr.cn
http://53v9mo4L.wdjcr.cn
http://gsZV0VU4.wdjcr.cn
http://iWOxRQXL.wdjcr.cn
http://HMoLOKij.wdjcr.cn
http://Xw5IioIQ.wdjcr.cn
http://LfsxtZhX.wdjcr.cn
http://ZPyYFj1c.wdjcr.cn
http://G1iOWYU7.wdjcr.cn
http://wN0xSV8l.wdjcr.cn
http://www.dtcms.com/a/15006.html

相关文章:

  • <论文>DeepSeek-R1:通过强化学习激励大语言模型的推理能力(深度思考)
  • TCP的拥塞控制
  • Postman如何汉化(保姆级教程)
  • Web渗透测试自学习资料超级大全 流程资料文档 涵盖OWASP Top Ten 漏洞 持续更新 ............
  • (Windows | Linux)ssh访问服务器报错:no matching key exchange method found
  • #渗透测试#批量漏洞挖掘#Crocus系统—Download 文件读取
  • Unity崩溃和ANR排查
  • 【个人开发】deepseed+Llama-factory 本地数据多卡Lora微调
  • 《aarch64汇编从入门到精通》-204页PPT+实验
  • sql:时间盲注和boolen盲注
  • Java 字符编码与解码:深入理解 Charset 类
  • 开启对话式智能分析新纪元——Wyn商业智能 BI 携手Deepseek 驱动数据分析变革
  • 急停信号的含义
  • JVM——堆的回收:引用计数发和可达性分析法、五种对象引用
  • Kubernetes部署KeyDB服务
  • 网络安全工程师逆元计算 网络安全逆向
  • 淘宝订单列表Fragment转场动画卡顿解决方案
  • React历代主要更新
  • Django创建超管用户
  • Qt:Qt界面优化
  • 第6章 6.2使用ASP.NET Core 开发WebAPI ASP.NET Core Web API
  • 【网络安全 | 漏洞挖掘】价值3133美元的Google IDOR
  • Node.js开发属于自己的npm包(发布到npm官网)
  • 算法——结合实例了解广度优先搜索(BFS)搜索
  • 进阶数据结构——离散化
  • 5. Docker 本地镜像发布到阿里云
  • 巨控GRM530无线远程模块与工业物联网融合技术方案
  • python爬虫解决无限debugger问题
  • Datawhale 组队学习 wow-agent task1 学习总结
  • CSS 属性选择器详解与实战示例