作用域随笔
/*
变量类型:按照存储方式
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\n", __func__);
}
uplooking();
extern d;
printf("d = %d\n", d);
// c = 10;
}
static void func()
{
printf("hello world\n");
}
int main()
{
foo(1);
test();
test();
test();
return 0;
}