簡體   English   中英

C語言中單個花括號代碼塊的含義

[英]Meaning of lone curly-braced code blocks in C

我遇到了一些包含幾個代碼塊的代碼,用花括號{} 在代碼塊之前沒有行將它們標記為if語句,函數定義或其他任何內容的一部分。 只是一個浮動在函數中間的代碼塊。 這有什么意義嗎? 通過代碼, gcc似乎非常高興; 我只能想象這是允許原始編碼器在視覺上分割功能塊的某種方式......

它創建了一個范圍。 塊內是否定義了自動變量? 如果是這樣,那么這些變量的范圍僅限於塊。 它對於您不希望污染函數的其余部分的臨時變量很有用,並且在編寫C89時也很有用,其中變量定義必須位於塊的開頭。

所以,而不是:

int main() {
    int a = 0;
    int b;
    int i;

    for (i = 1; i < 10; ++i) {
        a += i;
    }

    b = a * a;
    // do something with a and b
}

你可以有:

int main() {
    int a = 0;
    {
        int i;
        for (i = 1; i < 10; ++i) {
            a += i;
        }
    }

    {
        int b = a * a;
        // do something with a and b
    }
}

顯然,如果你這樣做,你還必須問自己這些塊是否會作為單獨的功能更好。

獨立花括號用於作用域 - 在塊中聲明的任何變量在其外部都不可見。

如果代碼塊包含局部變量聲明(您的描述不清楚其中的內容),那么它們可能會限制這些變量的范圍。

int i = ...;
// i is visible here
{
  int j = ...;
  // both i and j are visible here
}
// j went out of scope, only i is visible here

它用於創建范圍。 范圍,如果用於聲明只能在此范圍內使用的變量。 例如,如果在大括號之前聲明了變量,則可以在它們之后的大括號內使用它。 相反,如果在大括號內聲明了變量,則只能在大括號內使用。 希望這可以幫助。

它通常意味着它被編寫為通過更大的函數聲明變量的一部分,但變量只需要非常有限的范圍,或者甚至可能需要隱藏某些東西。 它完全是合法的 - 它只是引入了一個塊。 最大的問題始終是“該代碼的正確縮進是什么”。

它也可以被預處理器使用,它將一些其他語言轉換為生成的C.轉換后的材料通常包含在一個塊中(也可能包含#line指令)。

暫無
暫無

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

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