[英]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.