1. 程式人生 > >C語言中被static修飾的函式或變數

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