定義和宣告的區別和聯絡

2022-02-08 07:03:35 字數 1023 閱讀 7420

一、定義的概述

1.  變數的定義用於為變數分配儲存空間,還可以為變數指定初始值。 (在乙個程式中,變數有且僅有乙個定義。)

2. 宣告用於向程式表明變數的型別和名字。(程式中變數可以宣告多次。)

3. 定義也是宣告 —— 當定義變數的同時,我們也就宣告了它的型別和名字。

二、extern關鍵字

1. extern 宣告變數而不定義它,也不分配儲存空間。(事實上,它只是說明變數定義在程式的其他地方。)

2. 不定義變數的宣告包括物件名、物件型別和物件型別前的關鍵字extern:

extern int i;  // declares but does not define

iint i;      //  declares and defines

i3. 只有當宣告也是定義時,宣告才可以有初始化式,因為只有定義才分配儲存空間。

4. 如果宣告有初始化式,那麼即使宣告標記為 extern,它仍然被當作是定義:

extern double pi = 3.1416;  // 雖然使用了 extern ,但是這條語句還是定義了 pi,分配並初始化了儲存空間。

(ps:只有當 extern 宣告位於函式外部時,才可以含有初始化式。)

因為已初始化的 extern 宣告被當作是定義,所以該變數任何隨後的定義都是錯誤的。

extern double pi = 3.1416;  // definition

double pi;           // error: redefinition of

pi同樣,隨後的含有初始化式的 extern 宣告也是錯誤的:

extern double pi = 3.1416;   // definition

extern double pi;        // ok: declaration not definition

extern double pi = 3.1416;   // error: redefinition of

pi

定義和宣告的區別

之前學習c c 的時候,都沒去注意變數的定義和宣告的具體區別,也隨意將它們放在標頭檔案,今日看c primer,才發現原來變數的定義和宣告之間的區別竟然如此之大,而且區別它們兩個竟然如此重要。變數的定義用於為變數分配儲存空間,還可以為變數指定初始值。在乙個程式中,變數有且僅有乙個定義。宣告用於向程式...

定義和宣告的區別

2 變數定義和變數宣告的區別 3 物件定義和物件宣告的區別 關於宣告和定義有如下兩種特殊情況需要注意 1 宣告和定義如果變數型別不一致,將導致錯誤的解析。global.c float g f 10.0 main.c extern int g f intmain void 2 對於結構體型別如果只有宣...

變數定義和宣告的區別

所謂定義就是 編譯器 建立乙個物件,為這個物件分配一塊記憶體,並給它取上乙個名字,這個名字就是就是我們經常所說的變數名或物件名。宣告有兩重含義 1 告訴編譯器,這個名字已經匹配到一塊記憶體上,下面的 用到變數或者物件是在別的地方定義的。宣告可以出現多次。2 告訴編譯器,這個名字已經被預定了,別的地方...