static和extern用法

static

static有两种使用场景:

  1. 修饰变量

    修饰局部变量(称为静态局部变量):出了这个变量的作用域后,该变量不会被销毁。该变量存储在静态存储区

    修饰全局变量(称为静态全局变量):和普通全局变量的区别在于这个被static修饰的全局变量不能在其他源文件中使用,(即不能在其他源文件中用extern关键字修饰这个全局变量)

  2. 修饰函数

    和修饰全局变量类似,这个函数只能在本文件中使用,其他源文件中不能调用这个函数

 

extern(告诉编译器变量在其他地方定义了)

extern用在变量和函数的声明前,表示这个变量或函数在其他源文件中有定义,在此处声明是要用这个变量或函数

test1.c

int i = 1;//定义并初始化,同时也是声明(只能定义一次,但可以声明多次),定义分配空间,声明不分配空间
static int j;//定义,只有test1.c文件可以访问

void func1()//函数的定义
{

}

static void func2()
{

}
test2.c

extern int i;//声明多次
extern void func1();//声明。不分配存储空间
void fun3()
{
  func2();
}
test3.c

extern int i;//声明
extern void func2();//声明
extern void fun3(); int main() {   return 0 }

当然一般是将这些声明放在一个头文件中,这样要调用哪个函数,只用包含对应的头文件就行了。上面这中做法是不包含头文件

posted @ 2023-02-23 16:55  踏浪而来的人  阅读(86)  评论(0编辑  收藏  举报