深入理解C语言中的 extern`和 static

1. extern 关键字
定义和用途

extern 关键字用于声明一个变量或函数,表示其定义在另一个文件或本文件的其他位置。使用 extern 可以在多个文件之间共享全局变量或函数。

示例

假设有两个源文件:main.chelper.c

helper.c

c 复制代码
#include <stdio.h>

int count = 5; // 定义一个全局变量

void printCount() {
    printf("Count = %d\n", count);
}

main.c

c 复制代码
#include <stdio.h>

extern int count; // 引用 helper.c 中定义的全局变量
extern void printCount(); // 引用 helper.c 中定义的函数

int main() {
    printCount();
    return 0;
}

在这个示例中,extern 关键字使得 main.c 能够访问 helper.c 中定义的 count 变量和 printCount 函数。

2. static 关键字
定义和用途

static 关键字用于声明变量或函数的作用域为仅限于定义它们的文件,同时保持它们的值在函数调用之间持久存在。

示例

helper.c

c 复制代码
#include <stdio.h>

static int count = 5; // 静态全局变量,仅在本文件内可见

static void printCount() {
    printf("Count = %d\n", count);
}

main.c

c 复制代码
#include <stdio.h>

// 尝试外部链接 static 变量或函数将会导致链接错误
extern int count; // 链接错误
extern void printCount(); // 链接错误

int main() {
    // 无法访问 helper.c 中的静态变量或函数
    return 0;
}

在这个示例中,由于 countprintCount 被声明为 static,它们不能被 main.c 访问。

3. externstatic 的对比
  • 作用域extern 扩展变量或函数的作用域至整个程序,而 static 限制作用域至定义它们的文件。
  • 持久性static 也用于给局部变量提供持久性,即使在函数退出后,变量的值仍然保留。
结语

理解并正确使用 externstatic 关键字对于管理大型C语言项目中的变量和函数作用域、链接属性和生命周期至关重要。希望这篇文章能帮助你更好地掌握这些概念。

相关推荐
IT技术分享社区21 分钟前
C#实战:使用腾讯云识别服务轻松提取火车票信息
开发语言·c#·云计算·腾讯云·共识算法
极客代码24 分钟前
【Python TensorFlow】入门到精通
开发语言·人工智能·python·深度学习·tensorflow
疯一样的码农31 分钟前
Python 正则表达式(RegEx)
开发语言·python·正则表达式
&岁月不待人&1 小时前
Kotlin by lazy和lateinit的使用及区别
android·开发语言·kotlin
StayInLove1 小时前
G1垃圾回收器日志详解
java·开发语言
TeYiToKu1 小时前
笔记整理—linux驱动开发部分(9)framebuffer驱动框架
linux·c语言·arm开发·驱动开发·笔记·嵌入式硬件·arm
无尽的大道1 小时前
Java字符串深度解析:String的实现、常量池与性能优化
java·开发语言·性能优化
互联网打工人no11 小时前
每日一题——第一百二十四题
c语言
爱吃生蚝的于勒1 小时前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
羊小猪~~1 小时前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio