被static修饰的函数可认为是“局部函数”,只能被本源码文件访问。而没有static关键字的函数可认为是全局函数(可在函数前写上extern,此关键字是默认的,所以可不写),可跨文件被访问。static修饰的变量可类推,当在一个函数内部使用static修饰变量时,此变量保存的静态存储区,不因函数退出而销毁,只是只能在此函数中访问到而已。举例如下:
- function.h文件
#pragma once
static int StaticFun( int a, int b );
int ExternFun( int a, int b );
extern int externNum;
- function.c文件
#include "function.h"
static int staticNum = 11; //只能在本文件中使用
int externNum = 1; //本文件及外部文件均可使用
//只能在本文件中使用
static int StaticFun( int a, int b )
{
return a + b;
}
//函数默认是extern的,此函数在本文件中及外部文件中均可使用
int ExternFun( int a, int b )
{
int sum = StaticFun( a, b ) + 10; //同一个文件中可以访问static声明的函数
return sum;
}
- main.c文件
#include <stdio.h>
#include "function.h"
int main( int argc, char** argv )
{
int aa = 0, bb = 0;
//aa = StaticFun( 10, 11 ); //不能访问,编译不能通过,函数是static类型的
bb = ExternFun( 20, 20 );
printf( "aa=%d, bb=%d\n", aa, bb );
printf( "externNum=%d\n", externNum );
//printf( "staticNum=%d\n", staticNum ); //不能访问,编译不能通过,是static的变量
return 0;
}