c++中声明和定义的区别(这个兄弟写的解决了我的疑惑)
前言:網上有些關于C/C++中函數和定義之間的沒有描述的很清晰,這里總結一番:
聲明和定義在作用于變量和函數中是有區別的:這也是網上一些說話有分歧的地方;
1.聲明和定義變量時:
????????要區別這兩個詞,需要從編譯器的角度來看,當編譯器編譯你的程序時,聲明是僅僅告訴編譯器,有個某類型的變量會被使用,但是編譯器并不會為它分配任何內存。而定義就是分配了內存。主要區別是int a;int b=1;extern ?int a;
int a; 這就是一個定義(defining declaration),也叫定義型聲明,其實就是定義 ,編譯器已經分配了空間 你試試 連寫2個 int a; int a; 看編譯器報什么錯,
extern int a; 這才是一個聲明 c++ 允許多個聲明 同名同類型,試試 extern int a; extern int a; 定義就不行,舉個例子:
int ?main(){ int ? a; ?//聲明,也是定義了一個變量,棧中開辟了4字節的內存但是沒有賦值其中如果有值可能是原有內存中存在的隨機值int ?b=1; //聲明,也是定義了一個變量,在棧中開辟了4字節的內存并賦值為1a=0; //變量賦值extern ?int a;//聲明,完完全全的聲明,不是定義,該變量定義在函數外部(或文檔外部)}2.聲明和定義在作用于函數時:
聲明:一般在頭文件里,對編譯器說:這里我有一個函數叫function() 讓編譯器知道這個函數的存在。告知其類型,在哪里,函數的特征(返回值,參數類型,個數)。
定義:一般在源文件里,具體就是函數的實現過程 寫明函數體。運行時在內存中分配相應的存儲空間。
? 具體來看一個例子:
? ??????我們可以看到,函數的定義是一個整體 ?,函數的定義沒有分號 而且要加上一對花括號 ,里邊是函數的實現。
????????函數一定要在定義前聲明否則會報錯 。我一般在主函數前寫上函數的聲明 ,然后在主函數之后寫函數的定義。
這個很好區分,聲明就是只顯示該函數等的名稱,而具體的實現則稱為定義。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的c++中声明和定义的区别(这个兄弟写的解决了我的疑惑)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++日期输入问答
- 下一篇: static和不完全类型的一个例子