作用域随笔

/*
变量类型:按照存储方式
1.局部变量(声明在函数内的变量)
2.全局变量(声明在函数外的变量)

变量的类型:按照生命周期(变量在内存中存在的时间)
1.静态生命期:全局变量,和静态的局部变量(在编译期间就存在,直到整个程序终止)
2.自动生命期:非静态的局部变量.
3.动态生命期:使用动态内存分配函数去申请的变量

作用域:
1.文件作用域:全局非静态变量(整个工程内部都可以使用)
全局静态变量(在本文件的声明处开始,一直到文件尾部)
2.函数作用域:局部变量(静态和非静态),作用范围:声明处开始,一直函数结尾.
3.函数的参数的作用域:作用整个函数.
4.块作用域:函数体中出现的一对{}之内的变量,作用范围仅仅在该块内.

static:
1.static修饰全局变量,改变了该全局变量的作用域,从整个工程可以被访问,变成只能本文件被访问.
2.static修饰局部变量,改变来该变量的声明周期,从自动的生命周期变成静态生命周期.
3.static修饰函数,改变函数的作用范围,只能在本文件去调用函数,其他文件不能调用.
4.static修饰局部变量,在其函数被调用时候,初始化只执行一次.
*/

#include <stdio.h>

//static int a;
void foo(int a) //a整个函数
{
    int b;
    {
      static int c;
       // c = 10;
    }

    c = 10;

    void uplooking() //c99标准之后允许函数嵌套
    {
        printf("%s ", __func__);
    }
    
    uplooking();
    extern d;
    printf("d = %d ", d);
 //   c = 10;
    
}

static void func()
{
    printf("hello world ");
}

int main()
{
    foo(1);
    test();
    test();
    test();
    return 0;
}

原文地址:https://www.cnblogs.com/ltlly/p/4684445.html