C++中聲明和定義的區別


1、定義包含了聲明,但是聲明不包含定義,

如  int a = 0; //定義並聲明了變量 a

extern int a; //只是聲明了有一個變量 a 存在,具體 a 在哪定義的,需要編譯器編譯的時候去找。

2、函數也是類似,定義的時候同時聲明。但如果只是聲明,編譯器只知道有這么個函數,具體函數怎么定義的要編譯器去找。

void fun1(); //函數聲明 void fun1(){ //函數定義 cout<<"fun1"<<endl; }

3、extern 關鍵字聲明在變量和函數之前的說明。

(1)、作用在變量之前

變量只允許定義一次,但可以在多個文件中聲明。

Test.cpp 中:

int s32Val = 0; // 定義一個變量 s32Val,並賦初值為 0

Test1.cpp 中:

extern int s32Val; // 聲明變量 s32Val,它在 Test.cpp 中被定義,此處不可賦值

Test2.cpp 中:

extern int s32Val; // 聲明變量 s32Val,它在 Test.cpp 中被定義,此處不可賦值

(2)、作用在函數之前

Test.h:

extern void Fun(); // 函數聲明,extern 用於標識次函數為外部可調用函數

Test.cpp:

void Fun(); // 函數定義

4、C/C++ 編譯 cpp 文件是從上往下編譯,所以 main 函數里面調用其他函數時,如果其他函數在 main 函數的下面,則要在 main 函數上面先聲明這個函數。或者把 main 函數放在最下面,這個不僅限於 main 函數,其他函數的調用都是如此。被調用的函數要在調用的函數之前聲明

5、注意

用 extern 聲明外部變量是不能進行初始化:

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM