C++聲明extern變量和extern函數的用法
一、 聲明extern變量
1、 如何聲明
在正常的變量聲明前增加extern關鍵字。
2、在何處聲明
在頭文件中聲明extern變量。比如:test.h。在變量聲明的時候不要賦值。
3、在何處初始化
在與頭文件名稱相同的.cpp文件中定義,比如:test.cpp,test.cpp中必須引用test.h;
4、在何處調用
在主文件中調用,比如:main.cpp,主文件可以不與test.h同名,但必須必須引用test.h。
主文件一定不要引用test.cpp,否則出現警告:LNK2005、LNK1169;
5、舉例聲明extern變量
(1)、聲明extern變量的test.h文件
/*extern*/ //聲明外部變量 extern int a; extern int b;
(2)、初始化extern變量的test.cpp文件
/*extern*/ #include "test.h" //定義外部變量、外部變量初始化 int a = 520; int b = 1314;
(3)、調用extern變量的main.cpp文件
/*extern*/
//使用外部變量
#include <stdio.h>
#include "test.h"
/*#include"test.cpp"*/ //不可以這樣引用,否則警告LNK2005、LNK1169
int main(void)
{
printf("a = %d , b = %d\n", a, b);
return 0;
}
/*運行結果
a = 520 , b = 1314 */二、聲明extern函數
1、 如何聲明
在正常的函數聲明前增加extern關鍵字。
2、在何處聲明
在頭文件中聲明extern函數。比如:test.h,聲明extern函數不要書寫函數體的實現方法。
3、在何處定義
在與頭文件名稱相同的.cpp文件中定義和實現函數體,比如:test.cpp,test.cpp中必須引用test.h;
4、在何處調用
在主文件中調用,比如:main.cpp,主文件可以不與test.h同名,但必須必須引用test.h。
主文件一定不要引用test.cpp,否則出現警告:LNK2005、LNK1169;比如:
已啟動生成... 1>------ 已啟動生成: 項目: Project1, 配置: Debug x64 ------ 1>main.cpp 1>LINK : 沒有找到 C:\Users\pc\Desktop\extern\Project1\x64\Debug\Project1.exe 或上一個增量鏈接沒有生成它;正在執(zhí)行完全鏈接 1>test.obj : error LNK2005: "int __cdecl add(int,int)" (?add@@YAHHH@Z) 已經在 main.obj 中定義 1>test.obj : error LNK2005: "int a" (?a@@3HA) 已經在 main.obj 中定義 1>test.obj : error LNK2005: "int b" (?b@@3HA) 已經在 main.obj 中定義 1>C:\Users\pc\Desktop\extern\Project1\x64\Debug\Project1.exe : fatal error LNK1169: 找到一個或多個多重定義的符號 1>已完成生成項目“Project1.vcxproj”的操作 - 失敗。
5、舉例聲明extern變量
(1)、聲明extern函數的test.h文件
/*extern*/ //聲明外部變量 extern int a; extern int b; //聲明外部函數 extern int add(int a, int b); //extern關鍵字可要可不要
(2)、定義extern函數的test.cpp文件
/*extern*/
#include "test.h"
//定義外部變量、外部變量初始化
int a = 520;
int b = 1314;
//定義外部函數。實現外部函數的方法
int add(int a, int b)
{
return a + b;
};(3)、調用extern函數的main.cpp文件
/*extern*/
//使用外部變量
#include <stdio.h>
#include "test.h"
/*#include"test.cpp"*/ //不可以這樣引用,否則警告LNK2005、LNK1169
int main(void)
{
printf("a = %d , b = %d\n", a, b); //調用外部變量
printf("add(a, b) = %d\n", add(a, b)); //調用外部函數
return 0;
}
/*運行結果
a = 520 , b = 1314
add(a, b) = 1834 */三、總結
- 要養(yǎng)成正規(guī)的編程習慣,變量、函數、結構體、類的聲明要放在.h文件中,比如test.h;結構體和類體的實現可以放在test.h文件中,但不要初始化。聲明外部變量、聲明外部函數,等時必須使用extern關鍵字。
- 把變量的初始化、函數方法的實現、結構體的實現、類體的實現放在另一個.cpp文件中,這個.cpp文件默認的要與.h文件同名,比如test.cpp。同時在test.cpp要引用test.h文件。聲明外部變量、聲明外部函數時必須使用extern關鍵字。初始化外部變量、定義外部函數,等的實現方法時不要重復使用extern關鍵字。
- main.cpp負責變量的引用、函數的調用、結構體變量定義和結構體成員的調用,類對象的定義和類成員的調用;調用外部變量、外部函數時不需要使用extern關鍵字。main.cpp要引用test.h文件,一定不要引用test.cpp文件。
以上就是C++聲明extern變量和extern函數的用法的詳細內容,更多關于C++聲明extern變量和函數的資料請關注腳本之家其它相關文章!

