關於c++變數的宣告和定義
我們已經知道,乙個函式一般由兩部分組成:宣告部分和執行語句。
宣告部分的作用是對有關的識別符號(如變數?函式?結構體?共用體等)的屬性進行說明。對於函式,宣告和定義的區別是明顯的,前邊已說明,函式的宣告是函式的原型,而函式的定義是函式功能的確立。對函式的宣告是可以放在宣告部分中的,而函式的定義顯然不在函式的宣告部分範圍內,它是乙個檔案中的獨立模組。
對變數而言,宣告與定義的關係稍微複雜一些。在宣告部分出現的變數有兩種情況:一種是需要建立儲存空間的(如int a;)程式設計客棧;另一種是不需要建立儲存空間的(如extern int a;)。前者稱為定義性宣告(defining declaration),或簡稱為定義(definition)。後者稱為引用性宣告(referenceing declaration廣義地說,宣告包括定義,但並非所有的宣告都是定義。對「int a;」 而言,它是定義性宣告,既可說是宣告,又可說是定義。而對「extern int a;」 而言,它是宣告而不是定義。一般為了敘述方便,把建立儲存空間的宣告稱為定義,而把不需要建立儲存空間的宣告稱為宣告。顯然這裡指的宣告是狹義的,即非定義性宣告。例如:
int main( )
int a; // 是定義,定義a為整型外部變數
外部變數定義和外部變數宣告的含義是不同的。外部變數的定義只能有一次,它的位置在所有函式之外,而同一檔案中的外部變數的宣告可以有多次,它的位置可以在函式之內,也可以在函式之外。系統根據外部變數的定義分配儲存單元。對外部變數的初始化只能在定義時進行,而不能在宣告中進行。所謂宣告,其作用是向編譯系統發出乙個資訊,宣告該變數是乙個在後面定義的外部變數,僅僅是為了提前引用該變數而作的宣告。extern只用作宣告,而不用於定義。
用static來宣告乙個變數的作用有二:
對區域性變數用static宣告,使該變數在本bmvxoeb函式呼叫結束後不釋放,整個程式執行期間始終存在,使其儲存期為程式的全過程。
全域性變數用static宣告,則該變數的作用域只限於本檔案模組(即被宣告的檔案中)。
請注意,用auto,register,static宣告變數時,是在定義變數的基礎上加上這些關鍵字,而不能單獨使用。如「static a;」是不合法的,應寫成「static int a;」。
c++預處理命令
可以在c++源程式中加入一些「預處理命令」(preprocessor directives),以改進程式設計環境,提高程式設計效率。預處理命令是c++統一規定的,但是它不是c++語言本身的組成部分,不能直接對它們進行編譯(因為編譯程式不能識別它們)。
現在使用的c++編譯系統都包括了預處理、編譯和連線等部分,因此不少使用者誤認為預處理命令是c++語言的一部分,甚至以為它們是c++語句,這是不對的。必須正確區別預處理命令和c++語句,區別預處理和編譯,才能正確使用預處理命令。c++與其他高階語言的乙個重要區別是可以使用預處理命令和具有預處理的功能。
c++提供的預處理功能主要有以下3程式設計客棧種:
分別用巨集定義命令、檔案包含命令、條件編譯命令來實現。為了與一般c++語句相區別,這些命令以符號「#」開頭,而且末尾不包含分號。
本文標題: c++程式設計中變數的宣告和定義以及預處理命令解析
本文位址: /ruanjian/c/131044.html
C中變數的宣告和定義
變數定義就是告訴編譯器在何處建立變數的儲存,以及如何建立變數的儲存。變數定義指定乙個資料型別,幷包含了該型別的乙個或多個變數的列表。變數宣告向編譯器保證變數以指定的型別和名稱存在,這樣編譯器在不需要知道變數完整細節的情況下也能繼續進一步的編譯。變數宣告只在編譯時有它的意義,在程式連線時編譯器需要實際...
c 變數的宣告和定義
1.變數的定義 變數的定義用於為變數分配儲存空間,還可以為變數指定初始值。在乙個程式中,變數有且僅有乙個定義。2.變數的宣告 用於向程式表明變數的型別和名字。程式中變數可以宣告多次,但只能定義一次 3.定義和宣告的區別 一般的情況下我們常常這樣敘述,把分配記憶體空間的宣告稱之為 定義 把不需要分配記...
C 變數(四) 變數的宣告和定義
c 程式通常是由很多個file組成。為了讓每個file能夠使用同乙個變數,c 特意把變數的宣告和定義區別開來。變數的定義,是指為變數分配記憶體,或者有時也為其設定乙個初始值的操作。在程式中,同乙個變數只能定義一次。extern int i declares but not define i int ...