美文网首页
C语言static 和extern

C语言static 和extern

作者: 一直很安静_25ae | 来源:发表于2019-06-28 13:50 被阅读0次

    1. static和extern对函数的作用

    外部函数:定义的函数能被本文件和其他文件访问
    1> 默认情况下所有函数都是外部函数
    2> 不允许有同名的外部函数

    内部函数:定义的函数只能被本文件访问,其他文件不能访问
    1> 允许不同文件中有同名的内部函数

    static对函数的作用:
    1> 定义一个内部函数
    2> 声明一个内部函数

    //static声明了一个内部函数
    static void test2();
    
    int main()
    {
        test2();
        return 0;
    }
    //static定义了一个内部函数,这个函数只能在这个文件内部被访问,其他文件不能直接访问,并且其他文件可以定义一个名字完全一个的函数,由于被static修饰,所以会有作用域,
    static void test2()
    {    
    }
    

    extern对函数的作用:
    1> 完整地定义一个外部函数
    2> 完整地声明一个外部函数
    (extern可以省略,默认情况下声明和定义的函数都是外部函数)

    // 完整地定义一个外部函数
    /*
    extern void test()
    {
        printf("调用了test函数\n");
    }*/
    // 默认情况下,所有的函数都是外部函数,所以可以省略extern
    void test() //test函数可以被外界直接访问,默认情况下,只要不是被static修饰的函数都是外部函数,只要外部先对这个函数进行声明就可以直接使用
    {
        printf("调用了test函数\n");
        
        test2();
    }
    

    2. static和extern对变量的作用

    2.1 对全局变量的作用

    全局变量分为两种:

    • 外部变量
      1. 定义的变量能被本文件和其他文件访问
      2. 默认情况下所有的全局变量都是外部变量
      3. 不同文件中的同名外部变量,都代表着同一个变量
    // 定义一个外部变量
    int a; 
    
    • 内部变量
      1. 定义的变量只能被本文件访问,不能被其他文件访问
      2. 不同文件中的同名内部变量互不影响
    // 定义一个内部变量
    static int b;
    

    static对函数的作用:声明和定义一个内部函数
    static对变量的作用:定义一个内部变量
    extern对函数的作用:定义和声明一个外部函数(extern可以省略)
    extern对变量的作用:只起到声明一个外部变量的作用,主要用在变量定义在函数后面,前面想调用这个变量,只能在前面把这个变量进行声明,需要用extern声明
    举个栗子

    extern int a; //需要在前面用关键字extern进行声明才能被后面的函数调用
    int main()
    {
      //extern int a;//也可以放到函数里面进行声明
       a = 10; //a被定义在了后面
       return 0;
    }
    int a;//定义的变量放在了调用者的后面,需要在前面先进性声明extern int a;才能被使用
    

    2.2 对局部变量的作用

    static修饰局部变量:
    1. 延长局部变量的生命周期:程序结束的时候,局部变量才会被销毁
    2. 并没有改变局部变量的作用域
    3. 所有的test函数都共享着一个变量b

    void test()
    {
    /*
         static修饰局部变量:
         1.  延长局部变量的生命周期:程序结束的时候,局部变量才会被销毁
         2.  并没有改变局部变量的作用域
         3.  所有的test函数都共享着一个变量b
    */
        static int b = 0;//static延长局部变量的生命周期,一直存在,直到程序结束
        b++;
        printf("b的值是%d\n", b); // 3
    }
    int main()
    {
        test();//b的值是1
        
        test();//b的值是2
        
        test();//b的值是3
     
        return 0;
    }
    
    void test()
    {
       int a = 0;//代码块被调用后变量就自动销毁,下次调用的时候又重新分配内存空间
        a++;
        printf("a的值是%d\n", a); // 0
    }
    int main()
    {
        test();//a的值是0
        
        test();//a的值是0
        
        test();//a的值是0
     
        return 0;
    }
    

    static的使用场合

    static修饰局部变量的使用场合:
    1.如果某个函数的调用频率特别高
    2.这个函数内部的某个变量值是固定不变的
    举个栗子

    //求圆的周长
    void test()
    {
        static double pi = 3.14; //由于pai是个不变的数据,所以用static修饰,不用每次调用函数重新分配内存空间
        
        double zc = 2 * pi * 10;
    }
    int main()
    {
        for (int i = 0; i<100; i++) {
            test();
        }
    }
    

    相关文章

      网友评论

          本文标题:C语言static 和extern

          本文链接:https://www.haomeiwen.com/subject/bzblcctx.html