簡體   English   中英

C 編程全局和局部 scope

[英]C programming global and local scope

#include<stdio.h>

int f1(void);
int f2(void);
int f3(void);

int x = 10;

int main()
{
    int x =1;
    x+=f1() + f2() + f3() + f2();
    printf("%d", x);
    return 0;
}

int f1()
{
    int x = 25;
    x++;
    return x;
}
int f2()
{
    static int x= 50; 
    x++; 
    return x;
}

int f3()
{
    x*=10; 
    return x;
}

為什么 f3 采用全局 x 變量? 我的意思是 main 正在調用 f3 並且在 main 我們有 x 變量,為什么 f3 不采用 main x 變量的值。 請幫忙

C 使用所謂的詞法scope。 這意味着當您使用變量x時,您會從您所在的塊向外查看,直到找到x的定義,然后,這就是您所指的變量。

f3()中,您有x ,因此您可以查看您所在的塊。 x沒有定義,所以你向外看。 在這種情況下,向外是全局 scope,因為我們這里沒有任何嵌套塊。

詞法 scope 不受哪些函數調用哪些其他函數的影響。 它是代碼的 static 屬性,而不是運行代碼的動態屬性。 如果我們使用這種 scope 規則,它被稱為動態 scopef3()中的x將取決於在任何給定時間調用它的人。 所以x在不同的時間會有所不同。 不再使用動態 scope 的語言已經不多了,因為在程序執行的任何時候都很難弄清楚變量指的是什么。

它只是不同的 scope 規則,而 C 使用詞法 scope 而不是動態 Z31A1FD140BE4BEF2D181E158Z1

TL;DR因為scope不會通過 function 調用傳播。

以下是一些說明 scope 的塊。

scope1

main() {
    scope2
    function();
}

function() {
    scope3
    if () {
        scope4
    }
    scope5
}

scope1是一個“全局”scope,在您的項目中隨處可見和可訪問。 如果您在此處將任何變量聲明為“靜態”,則它們僅在該文件中是已知的。

scope2在 main() 的主體中是已知的。 main() 的主體也知道並可以訪問scope1

scope3scope5是一樣的,function() 的主體也知道全局 scope1。 function() 不知道scope2 ,盡管是從那里調用的。 如果您希望scope3scope5了解有關scope2的任何信息,則必須將其作為參數傳遞給 function()。

scope4if的主體。 if 的主體知道scope3和全局scope1 在 scope4 中聲明的任何內容都會在塊的末尾丟失,因此scope5不知道有關scope4的任何信息,除非scope4實際上更改了在scope1scope3中聲明的變量的值。

當嵌套 scope 的不同級別中的變量具有相同的名稱時,很容易出現混淆。 應該避免這種情況!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM