C語言中被static修飾的函數或變量

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章