• c语言之extern和static


    今天用extern突然发现了extern的另一个特点。

    比如,现在operator.c里面有个全局数组变量int arr[5],和三个函数f1,f2,f3.

    #include<stdio.h>
    #define MAX 5
    int arr[MAX]={2,3,4,5,6};
    int sum()
    {
      int i,n;
    n=0;
    for(i=0;i<MAX;i++)
    {
       n+=arr[i];
    }
    return n;
    }
    int get_max()
    {
       int max;int i;
    i=0;
    max=arr[i];
    for(i=0;i<MAX;i++)
    {
       if(arr[i]>max)max=arr[i];
    }
    return max;
    }

    然后在另一个函数main.c里调用他们,

    #include<stdio.h>
    extern int arr[];//第二行

    extern int sum();//第三行

    extern int get_max();//第四行

    extern void print();//第五行
    int main(void)
    {
      int all,max;
    all=sum();
    max=get_max();
    print();
    printf("%d,%d\n",all,max);
    //printf("%d",arr[0]);
    return 0;
    }

    然后gcc operation.c main.c -o main

    要点在第二,第三,第四,第五行,在这里可以去掉第三行、第四行和第五行,但不能去掉第二行,因为函数默认是extern的,而变量不是。

    另外,如果在operation.c里,在函数和变量前面加上static,那么它就不可以在外面被引用了,static没有改变全局变量的声明周期(依然在数据段),但却改变了全局变量的作用范围(变小了),加了static的全局变量只能在本文件中引用!
                 

  • 相关阅读:
    JVM和HotSpot
    java中的四种引用类型
    垃圾回收与算法
    Full GC
    JVM内存结构
    事务不同的隔离级别实现原理
    事务的隔离级别
    jQuery后续和 前端框架Bootstrap
    jQuery
    BOM和DOM操作
  • 原文地址:https://www.cnblogs.com/ymy124/p/2292355.html
Copyright © 2020-2023  润新知