C++聲明extern變量和extern函數(shù)的用法
一、 聲明extern變量
1、 如何聲明
在正常的變量聲明前增加extern關(guān)鍵字。
2、在何處聲明
在頭文件中聲明extern變量。比如:test.h。在變量聲明的時(shí)候不要賦值。
3、在何處初始化
在與頭文件名稱相同的.cpp文件中定義,比如:test.cpp,test.cpp中必須引用test.h;
4、在何處調(diào)用
在主文件中調(diào)用,比如:main.cpp,主文件可以不與test.h同名,但必須必須引用test.h。
主文件一定不要引用test.cpp,否則出現(xiàn)警告: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)、調(diào)用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; } /*運(yùn)行結(jié)果 a = 520 , b = 1314 */
二、聲明extern函數(shù)
1、 如何聲明
在正常的函數(shù)聲明前增加extern關(guān)鍵字。
2、在何處聲明
在頭文件中聲明extern函數(shù)。比如:test.h,聲明extern函數(shù)不要書寫函數(shù)體的實(shí)現(xiàn)方法。
3、在何處定義
在與頭文件名稱相同的.cpp文件中定義和實(shí)現(xiàn)函數(shù)體,比如:test.cpp,test.cpp中必須引用test.h;
4、在何處調(diào)用
在主文件中調(diào)用,比如:main.cpp,主文件可以不與test.h同名,但必須必須引用test.h。
主文件一定不要引用test.cpp,否則出現(xiàn)警告:LNK2005、LNK1169;比如:
已啟動(dòng)生成... 1>------ 已啟動(dòng)生成: 項(xiàng)目: Project1, 配置: Debug x64 ------ 1>main.cpp 1>LINK : 沒有找到 C:\Users\pc\Desktop\extern\Project1\x64\Debug\Project1.exe 或上一個(gè)增量鏈接沒有生成它;正在執(zhí)行完全鏈接 1>test.obj : error LNK2005: "int __cdecl add(int,int)" (?add@@YAHHH@Z) 已經(jīng)在 main.obj 中定義 1>test.obj : error LNK2005: "int a" (?a@@3HA) 已經(jīng)在 main.obj 中定義 1>test.obj : error LNK2005: "int b" (?b@@3HA) 已經(jīng)在 main.obj 中定義 1>C:\Users\pc\Desktop\extern\Project1\x64\Debug\Project1.exe : fatal error LNK1169: 找到一個(gè)或多個(gè)多重定義的符號(hào) 1>已完成生成項(xiàng)目“Project1.vcxproj”的操作 - 失敗。
5、舉例聲明extern變量
(1)、聲明extern函數(shù)的test.h文件
/*extern*/ //聲明外部變量 extern int a; extern int b; //聲明外部函數(shù) extern int add(int a, int b); //extern關(guān)鍵字可要可不要
(2)、定義extern函數(shù)的test.cpp文件
/*extern*/ #include "test.h" //定義外部變量、外部變量初始化 int a = 520; int b = 1314; //定義外部函數(shù)。實(shí)現(xiàn)外部函數(shù)的方法 int add(int a, int b) { return a + b; };
(3)、調(diào)用extern函數(shù)的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); //調(diào)用外部變量 printf("add(a, b) = %d\n", add(a, b)); //調(diào)用外部函數(shù) return 0; } /*運(yùn)行結(jié)果 a = 520 , b = 1314 add(a, b) = 1834 */
三、總結(jié)
- 要養(yǎng)成正規(guī)的編程習(xí)慣,變量、函數(shù)、結(jié)構(gòu)體、類的聲明要放在.h文件中,比如test.h;結(jié)構(gòu)體和類體的實(shí)現(xiàn)可以放在test.h文件中,但不要初始化。聲明外部變量、聲明外部函數(shù),等時(shí)必須使用extern關(guān)鍵字。
- 把變量的初始化、函數(shù)方法的實(shí)現(xiàn)、結(jié)構(gòu)體的實(shí)現(xiàn)、類體的實(shí)現(xiàn)放在另一個(gè).cpp文件中,這個(gè).cpp文件默認(rèn)的要與.h文件同名,比如test.cpp。同時(shí)在test.cpp要引用test.h文件。聲明外部變量、聲明外部函數(shù)時(shí)必須使用extern關(guān)鍵字。初始化外部變量、定義外部函數(shù),等的實(shí)現(xiàn)方法時(shí)不要重復(fù)使用extern關(guān)鍵字。
- main.cpp負(fù)責(zé)變量的引用、函數(shù)的調(diào)用、結(jié)構(gòu)體變量定義和結(jié)構(gòu)體成員的調(diào)用,類對(duì)象的定義和類成員的調(diào)用;調(diào)用外部變量、外部函數(shù)時(shí)不需要使用extern關(guān)鍵字。main.cpp要引用test.h文件,一定不要引用test.cpp文件。
以上就是C++聲明extern變量和extern函數(shù)的用法的詳細(xì)內(nèi)容,更多關(guān)于C++聲明extern變量和函數(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C語言中棧和隊(duì)列實(shí)現(xiàn)表達(dá)式求值的實(shí)例
這篇文章主要介紹了C語言中棧和隊(duì)列實(shí)現(xiàn)表達(dá)式求值的實(shí)例的相關(guān)資料,這里主要是對(duì)數(shù)據(jù)結(jié)構(gòu)中棧和隊(duì)列的理解和應(yīng)用,需要的朋友可以參考下2017-08-08C++找出字符串中出現(xiàn)最多的字符和次數(shù),時(shí)間復(fù)雜度小于O(n^2)
今天小編就為大家分享一篇關(guān)于C++找出字符串中出現(xiàn)最多的字符和次數(shù),時(shí)間復(fù)雜度小于O(n^2),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12C++ 使用模板實(shí)現(xiàn)一個(gè)List的實(shí)例
這篇文章主要介紹了 C++ 使用模板實(shí)現(xiàn)一個(gè)List的實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-05-05