C 語言快速導覽 - 範圍規則

C 語言識別字會有四種不同的效力範圍,如下
檔案範圍
函數範圍
區塊範圍
函數原型範圍


宣告在任何函數之外的識別字名稱都具有檔案範圍,如下例
#include <stdio.h>

void other(void);

int i = 0;

int main(void)
{
    printf("in main, i = %d\n", i++);
    other();
    printf("in main, i = %d\n", i++);
    other();
    printf("in main, i = %d\n", i++);
    
    return 0;
}

void other(void)
{
    printf("in other, i = %d\n", i++);
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:filescope.c
    功能:示範具檔案範圍的變數
    作者:張凱慶
    時間:西元2010年4月 */


編譯後執行,如下



檔案範圍的意思是說整個檔案的任何函數均可使用,這樣使具有檔案範圍的識別字名稱形成全域變數的效果。


具有函數範圍的識別字只有標籤,形如
lable:


識別字加上冒號,包括 switch 及 goto 所用的標籤,標籤可以在函數的任何位置使用,一旦超出函數的範圍,就無法利用函數內的標籤。


所謂的區塊範圍是指用大括弧 {} 圍起來的區域,如下例
#include <stdio.h>

int main(void)
{
    int i = 0;
    printf("i = %d\n", i++);
    
    {
        printf("in block, i = %d\n", i++);
        int i = 99;
        printf("in block, i = %d\n", i++);
    }
    
    printf("i = %d\n", i++);
    
    return 0;
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:blockscope.c
    功能:示範具有區塊範圍的變數
    作者:張凱慶
    時間:西元2010年4月 */


編譯後執行,如下



第 10 行在區塊內重新宣告變數 i ,這是在區塊內的區域變數,並不會影響到區塊外的範圍。


效力範圍最窄的就是函數原型範圍,僅限於函數原型小括弧的參數列中。


沒有留言: