C核心技術手冊(十)

2021-08-31 02:40:58 字數 1448 閱讀 2320

識別符號範圍

識別符號的範圍即程式所能「看到」識別符號的部分,範圍的型別通常由你宣告變數的地方決定(除過標籤,它往往具有函式範圍),下面是四種可能的範圍:

檔案域:

如果你在所有的程式塊和引數列表這外宣告了乙個識別符號,那麼它將具有檔案域,宣告之後在任意地方使用它直到翻譯單元結束。

塊域:除過標籤,在塊中宣告的識別符號具有塊域,你只能在宣告它的最小塊域中使用它,最小塊域通常為乙個函式的函式體,在c99

中,宣告不必放在函式塊的最前面,在乙個函式中定義的引數名也具有塊域,在函式體中有效。

函式原型域:

函式原型中的引數名具有函式原型域,因為這些引數名在原型外沒有意義,它們往往用做注釋,可被忽略。

函式域:

標籤的範圍通常為它所出現在函式塊,即使它出現在巢狀的塊中,換句話說,你可以使用goto

語句跳到同一函式中任意具有此標籤的地方(

跳進乙個巢狀的塊中是個不好的主意)。

乙個識別符號的範圍從它定義之後就開始,但是,結構體,標籤,聯合體、列舉型別和列舉常量是個例外,它們的範圍在宣告出現後即開始,所以它們可以在宣告本身中再次引用,下面的為乙個結構體型別的宣告,最後乙個成員為結構next,

是乙個剛宣告的結構的指標:

struct node ; // define a structure type void printnode( const struct node *ptrnode); // declare a function int printlist( const struct node *first ) // begin a function definition }

在這個**段中,識別符號node, next, printnode 和printlist均有檔案域,引數ptrnode具有檔案原型域,變數first和ptr具有塊域。

在乙個巢狀中,可以宣告乙個外部已經宣告的識別符號,,即使新識別符號名稱相同,如果你這樣做,新識別符號將有塊或函式原型域,且塊域或函式原型域將是一外層域的真子集,在這種場景下,內部識別符號隱藏了外部的宣告,所以外部宣告的變數或函式在內部是不可見的,例如,下面的宣告是請允許的:

double x; // declare a variable x with file scope long calc( double x ); // declare a new x with function prototype scope int main( ) x *= 2; // here x refers to the long variable again /*...*/ }

在本例中,long

型別的變數x

宣告在main()

中,隱藏了double

型別的變數x,

因此,在main()

中沒有辦法直接訪問double

型別的變數x

,此外,if

條件塊中,float

型變數x

又隱藏了long

型別的變數x。

C核心技術手冊(二)

組成c 程式的 積木 叫做函式,每個函式都有自己的用途,並且可以相互呼叫。每個函式包含可被執行的語句,而這些語句可以分組,從而形成語句塊。做為程式設計師,你可以直接使用 c標準庫的的函式,也可以自己編寫函式來實現既定目的。除此之外,還有很多專用的庫可以使用,例如圖形函式庫。然而,使用這些非標準庫,會...

C核心技術手冊(四)

在原始碼中應該使用注釋來說明程式,在 c語言中,有兩種插入注釋的方法 塊注釋使用 表示 開始,表示結束 行注釋使用 開始,直到此行結尾。你可以使用分割符 和 在一行中開始和結束注釋,並可以巢狀注釋在多行中,例如,在下面的函式原型中,省略號 表示 open 函式有第三個可選引數,注釋解釋此引數的使用方...

C核心技術手冊(七)

通用字元名 c也支援通用字元名來使用擴充套件字符集,使用通用字元名,你可以指定任何擴充套件字元,它的 unicode 值如下形式 u x 或者 u xx 其中,x 或 xx為16 進製的unicode 指標符號,使用小寫字母 u做為字首,後面為四個十六進製制數字,或者大寫字母 u,後面為 8個十六進...