花括號作用域
//作用域,可以看作一個變量的有效使用區域
//函數外部也是一個大的作用域,暫且記作:作用域0
void Fun()
{
//函數內部作用域,暫且記作:作用域1
while()
{
//循環內部,暫且記作:作用域2
if()
{
//if內部,也是一個作用域,暫且記作:作用域3
}
}
if()
{
//if內部,也是一個作用域,暫且記作:作用域4
}
{
//我只寫個花括號,這個也是一個作用域,暫且記作:作用域5
}
}
從上面代碼塊兒,可以看到,
作用域0,直接包含作用域1,同時,又間接包含作用域2、3、4、5;(作用域1中聲明的變量,可以在其本身,以及2、3、4、5中使用,但是不能在1的上級作用域使用,也就是作用域0,函數外部。)
作用域1,直接包含作用域2、4、5,同時,又間接包含作用域3;(作用域2中聲明的變量可以在作用域2,以及2的下一級作用域3中使用,但是不能在0、1、4、5中使用。)
變量的使用,只能是從變量聲明的作用域,向下延伸,不能反向,不能向上一級作用域。也就是說,只能在當前作用域或者子級作用域下面使用。
變量的聲明的位置
下面,簡單說一下C/C++
中的變量聲明。
在標準的C中,有嚴格的規範,變量的聲明必須在作用域的起始部分。(如有代碼疑問,可能是您在C++中把C混淆了,或者您的編譯器的標準不嚴格。嚴格的一般應該是linux或unix下的C標準。)
甚至,函數內部的所有變量聲明,都人爲的嚴格要求在函數起始部分,防止變量的隨處聲明和定義。(這一點,可能和您的老師或者師傅,以及有的書本中,視頻中描述的不一樣,那是因爲現在多數編程語言已經不這麼要求,而他們混淆了規則。)請記住,嚴格的標準的C,變量的聲明是在作用域或者函數的起始部分。個人建議,統一放在函數的起始部分。
優點
-
開發階段,一般有的函數體很龐大(遇到這種情況,一般是函數的設計問題,但也不排除必要性。)面對如此龐大的函數體,變量的聲明統一在函數起始位置,可以防止變量使用的時候,未聲明,尤其使用goto語句的時候,很容易就跳過了某些變量的聲明。
-
便於變量的多次有效利用,也就是,一次聲明,多次初始化,多次利用。
-
便於閱讀..