1. static和extern修饰局部变量
static和extern都是用来修饰变量的(局部static实际也是全局的)
static修饰的变量 只有你的包含那个变量定义的源代码文件可以访问(内部的变量)
extern定义的变量的哪个源文件都可以访问 只要生命了就可以(外部变量)
static(静态变量) 和 extern 修饰局部变量
static修饰局部变量:
//作用:1)static定义的变量的作用域会得到延长
// 2) static定义变量的语句只会被执行一次
extern是不能够修饰局部变量的
#include <stdio.h>
/**
*
*/
void sum(){
//没有使用static修饰
int num = 0;
printf("num = %d\n",num); //0
num++;
}
void sum1(){
//static 可以修饰局部变量
//作用:1)static定义的变量的作用域会得到延长
// 2) static定义变量的语句只会被执行一次
static int num = 0;
printf("num = %d\n",num); //0
num++;
}
void sum2(){
//extern int num = 0;
int num = 0;
printf("num = %d\n",num); //0
num++;
}
int main(int argc, const char * argv[]) {
// sum1();
// sum1();
// sum1();
return 0;
}
2. static和extern修饰全局变量
全局变量:
内部变量:只能在本文件中访问的变量
外部变量:可以在其他访问的变量,默认所有全局变量都是外部变量
Static作用:
声明一个内部变量
定义一个内部变量
由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其他源文件中引起错误。
注意:
在不同文件中可以定义同名的内部变量,互不影响。
static 对全局变量的作用(内部变量)
static修饰的全局变量,表示该全局变量只能在当前文件中使用,而不能在其他文件中使用
在不同的文件中,使用static可以声明的同名的变量
extern 对全局变量的作用
extern修饰的全局变量,表示当前变量可以在本文件中使用,也可以在
其他文件中使用
注意:
1)extern声明的全局变量在不同的文件中不能同名(两个文件须由包含关系)
#include <stdio.h>
#include <stdlib.h>
#include "test.h"
static int num = 10; //声明同名变量
//extern int a=10; //因为 test.c文件中已经定义a了
//全局声明
//2)extern int a;
//
int a; //省略了extern
//不能声明不存在的变量
extern int b;
int x; //全局变量默认的初始化为0
int main() {
printf("num = %d\n",num);
//调用test.c中的函数
test1();
//1)在使用a之前 extern int a; //声明变量a
printf("-->a = %d\n ",a);
printf("x = %d\n",x);
test2();
}
|
|