vlambda博客
学习文章列表

C语言关键字之static用法


点击上方蓝字,关注我,获取更多知识


C语言关键字之static用法
C语言关键字之static用法

C语言关键字之static用法
01




    C语言关键字:学习了C语言之后,知道C语言有32个关键字,常用的就是int 、double 、long、char、float、short等等这些定义变量类型的关键字。

     但是,也有很多大家经常常用到,但是对其了解不太全面,今天,我来给大家分享一下,static 的用法。    

C语言关键字之static用法
static

C语言关键字之static用法

    在C中,static主要定义全局静态变量定义局部静态变量定义静态函数




C语言关键字之static用法
全局静态变量

    在全局变量前面加上关键字static,该全局变量变成了全局静态变量。全局静态变量有以下特点。
    a.在全局区分配内存。
    b.如果没有初始化,其默认值为0.
    c.该变量在本文件内从定义开始到文件结束可见。

    总结:

     普通全局变量对整个工程可见,其他文件可以使用extern外部声明后直接使用。也就是说其他文件不能再定义一个与其相同名字的变量了(否则编译器会认为它们是同一个变量)。

    静态全局变量仅对当前文件可见,其他文件不可访问,其他文件可以定义与其同名的变量,两者互不影响。


C语言关键字之static用法
局部静态变量

    在局部变量前面加上关键字static,局部变量变成了静态局部变量,其特点如下:

    a.该变量在全局数据区分配内存。
    b.它始终驻留在全局数据区,直到程序运行结束。
    c. 其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束

    总结:

    普通局部变量,在任何一个函数内部定义的变量都属于普通局部变量。编译器一般不对普通局部变量进行初始化,也就是说它的值在初始时是不确定的,除非对其显式赋值。

    静态局部变量使用static修饰符定义,即使在声明时未赋初值,编译器也会把它初始化为0。且静态局部变量存储于进程的全局数据区,即使函数返回,它的值也会保持不变。

void fun(void){    static int n; //static定义自动赋初值0 n++;    printf("n=%d\n", n);}int main(void){    int i=10;     //普通变量得初始化 while(i--) { fun();  } return 0;}


    该函数在主函数的10次调用下,会输出10次n的值

C语言关键字之static用法

C语言关键字之static用法
静态函数

      在函数返回类型前加上static关键字,函数即被定义为静态函数,其特点如下:
    a.静态函数只能在本源文件中使用。
    b.在文件作用域中声明的inline函数默认为static类型。

    总结:

    普通函数可以直接在其他文件中引用,甚至不必用extern申明。

    静态函数只能在声明它的文件中可见,其他文件不能引用该函数,不同的文件可以使用相同名字的静态函数,互不影响。

    

/* file1.c */#include <stdio.h>static void fun(void){    printf("hello world !(fun())\n");}int main(void){ fun();    fun1(); return 0;}/* file2.c */#include <stdio.h>static void fun1(void){ printf("hello world !(fun1())\n\n");}

    使用 gcc file1.c file2.c编译时,错误报告如下

     在函数‘main’中:static_fun.c:(.text+0x20):对‘fun1’未定义的引用 

                               collect2: error: ld returne

      只要file2.c中不使用static修饰符,就可以了。


获取c资源:

C语言常用书籍资源

C语言关键字之static用法

数据结构全部源代码

ID:py667py

回复 "获取c资料" 获取资料