被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;
}