共用方式為


extern 儲存類別規範

宣告變數extern的儲存類別規範會定義在外部層級,在任何程式的原始程式檔中的同名變數的參考。 內部extern宣告用來讓外部層級變數定義的區塊中的 [看得見。 否則宣告在外部層級,除非變數宣告時包含extern關鍵字只會顯示在該區塊中宣告它。

範例

本範例說明了內部和外部層級宣告:

// extern_StorageClassSpecified.c
#include <stdio.h>

void other( void );

int main()
{
    // Reference to i, defined below: 
    extern int i;

    // Initial value is zero; a is visible only within main: 
    static int a;

    // b is stored in a register, if possible: 
    register int b = 0;

    // Default storage class is auto: 
    int c = 0;

    // Values printed are 1, 0, 0, 0: 
    printf_s( "%d\n%d\n%d\n%d\n", i, a, b, c );
    other();
    return;
}

int i = 1;

void other( void )
{
    // Address of global i assigned to pointer variable:
    static int *external_i = &i;

    // i is redefined; global i no longer visible: 
    int i = 16;

    // This a is visible only within the other function: 
    static int a = 2;

    a += 2;
    // Values printed are 16, 4, and 1:
    printf_s( "%d\n%d\n%d\n", i, a, *external_i );
}

在這個範例中,變數i定義在外部層級的起始值 1。 extern中的宣告main函式用來宣告外部層級的參考i。 靜態變數a會初始化為 0 預設的情況下,由於省略初始設定式。 若要呼叫printf列印 1、 0、 0 度和 0 的值。

在other函式、 全域變數的位址i用來初始化靜態指標變數external_i。 此方法可行,因為有全域變數靜態存留期,這表示它的位址並不會在程式執行期間變更。 下一步],將變數i已重新定義為 16 的初始值的區域變數。 這個重複定義並不會影響外部層級的值i,這隱藏的本機變數名稱的用法。 通用值i現在已經可以存取只有間接在這個區塊內,透過指標external_i。 嘗試指派的位址自動變數i指標無法運作,因為它可能是不同區塊的每一次。 將變數a宣告為靜態變數且已初始化為 2。 這a不與衝突a在main,因為靜態在內部的層級的變數是只能在區塊內的 [看得見中所宣告。

將變數a增加 2,結果讓 4。 如果other函式所呼叫一次在相同程式中,預設值的a將會是 4。 內部靜態變數保留其值,當程式結束,並再重新進入的區塊中所宣告。

請參閱

概念

內部的層級宣告的的儲存類別規範