C语言 static extern

static

简单来说,static关键字用于限制所修饰对象的生命周期作用域
在了解这部分内容时,需要非常熟悉C语言的编译链接过程以及程序–>内存池的过程

静态变量

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

通过static修饰后,变量x的生命周期持续整个程序运行期间,而不会随着函数的执行完毕被释放
变量x的值随函数被执行的次数而改变

静态函数

static void myStaticFunction() {
    // 函数的实现
}

静态函数只能在当前文件中使用,不能在其他文件中调用。它们具有文件作用域
这种限制有助于隐藏函数的实现细节避免与其他文件中的同名函数发生冲突

静态全局变量

static int globalVar = 10;  // 静态全局变量

静态全局变量的作用域仅限于当前源代码文件,不能被其他文件访问。
这有助于限制全局命名空间的污染和避免命名冲突

静态成员变量

static int globalVar = 10;  // 静态全局变量

在面向对象编程中,static 修饰的成员变量属于类而不是类的实例
静态成员变量在所有类的实例之间共享,而不是每个实例都有自己的副本

extern

在了解C语言编译链接以及程序内存池的基础上,结合以上对static关键字的介绍
在对多个源文件同时进行编译时,若全局变量或函数没有被static修饰限制
那么这些全局对象将被定义在公共数据段(global data segment),可以被所有源文件访问

声明外部全局变量

// 在文件A.c中声明外部全局变量
extern int globalVar;

// 在文件B.c中定义外部全局变量
int globalVar = 10;

使用 extern 可以在一个源代码文件中声明在其他源代码文件中定义的全局变量。这样,编译器就知道该变量是外部的,并且不会分配新的存储空间

声明外部函数

// 在文件A.c中声明外部函数
extern void myFunction();

// 在文件B.c中定义外部函数
void myFunction() {
    // 函数的实现
}

extern 还可用于声明在其他源代码文件中定义的函数。这对于在多个文件中使用相同函数的情况非常有用

使用全局变量和函数

extern int globalVar;
extern void myFunction();

int main() {
    globalVar = 20;     // 使用外部全局变量
    myFunction();       // 调用外部函数
    return 0;
}


在一个源代码文件中使用 extern 声明的外部变量或函数后,你可以在该文件中使用它们,编译器会知道它们的定义在其他文件中

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值