C语言中 static 和 extern 的用法详解

Posted 我想月薪过万

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中 static 和 extern 的用法详解相关的知识,希望对你有一定的参考价值。

在 C 语言中变量存在两种 :

  • 全局变量
  • 局部变量

所以下面我们就以这两种变量为引展开对  static 和 extern 的讲解

extern

其实啊,我们所定义的全局变量默认就是 带 extern 的。如

int g_x = 10;  ==>等价==> extern int g_x = 10;

这是什么意思呢?,就是说这种全局变量 在整个源程序中 所有 源文件 里都可以访问和修改。

只是访问方式有所不同,下面我就详细说一下在各个地方的访问方式:

  • 在声明全局变量的源文件中使用
#include <stdio.h>

void demo();

int g_x = 10;

int main()

    g_x = 20;
    printf("main => %d\\n", g_x);
    demo();
    printf("main => %d\\n", g_x);
    return 0;
  • 在其他源文件中使用
#include <stdio.h>

void demo()

    extern int g_x; //声明一个变量 加上 extern 之后表示使用全局的,你不加就是局部变量了
    g_x = 30;
    printf("other => %d\\n", g_x);
    
  • 运行结果

static

static 如果修饰全局变量,则会 对其他源文件隐藏该全局变量。

我们还是用上面的的代码示例,就简单修改一个地方,在 int g_x = 10 前面加上一个修饰符 static

如下:

int g_x = 10;  ==>修改为==> static int g_x = 10;

这个时候你再编译这个代码,你就会发现报错,说demo01.c中找不到该变量。

现在你能明白这个道理了吧:即 static 如果修饰全局变量,则会 对其他源文件隐藏该全局变量

static 如果修饰局部变量,则会使该局部变量获得持久化能力,示例代码如下:

#include <stdio.h>

void test_static()

    static int num = 10;
    num += 10;
    printf("test => %d\\n", num);


int main()

    test_static();
    test_static();
    return 0;

运行结果展示

以上是关于C语言中 static 和 extern 的用法详解的主要内容,如果未能解决你的问题,请参考以下文章

C语言static 和extern

static和extern理解

C语言20-static和extern关键字2-对变量的作用

2021-05-30笔记(初始c语言3)

c语言中static的作用和用法

C语言局部变量全局变量,局部静态变量,全局静态变量,extern,static的区别