C++中的頭文件與Extern(外部函數(shù)調(diào)用)方式
C++頭文件與Extern(外部函數(shù)調(diào)用)
⒈ 頭文件引用
⒉ extern調(diào)用同一個(gè)項(xiàng)目中的其他cpp文件中的函數(shù)
?【 main.cpp 】
#include"day0915_3.h"
extern void func_1();
void func_2(){
cout << "Hello" << endl;
}
int main(){
// void (*x)();
// x = func_1;
// x();
int a = 99;
int *p = &a;
cout << *p**p <<endl;
cout << func_h() << endl;
system("pause");
func_1();
return 0;
}?【 day0915_3.h 】
#ifndef 條件編譯,防止頭文件被多次包含
#ifndef __DAY0915_3_H__ #define __DAY0915_3_H__ #include"iostream" using namespace std; int func_h(); #endif
?【 day0915_3.cpp 】
#include <iostream>
using namespace std;
int func_h(){
return 999;
}
void func_1(){
cout << "hello,world!" << endl;
}通過(guò)extern和頭文件來(lái)引用函數(shù),有啥區(qū)別 ?
1、extern 應(yīng)用于全局變量,函數(shù)或模板聲明
說(shuō)明該符號(hào)具有外部鏈接 (external linkage) 屬性(這個(gè)符號(hào)在別處定義)。
2、變量可以聲明多次,但只能定義一次
在程序中變量可以聲明多次,但只能定義一次。
一般而言,定義就是聲明。
但 C++ 中由于 extern 的緣故,變量的聲明和定義是可以分開(kāi)的。
凡是沒(méi)有帶 extern 的聲明同時(shí)也都是定義。
而對(duì)函數(shù)而言,帶有{}是定義,否則是聲明。
int i; ? ? ? ? ? ? ? ?//聲明并定義i
int j = 1; ? ? ? ? ? ?//聲明并定義j
double max(double d1,double d2){} //函數(shù)定義
extern double max(double d1,double d2); ?//函數(shù)聲明如果想聲明一個(gè)變量而非定義它,
就在變量名前添加關(guān)鍵字 extern,且不要顯式的初始化變量。
extern int i; ? ? ? ? ?//聲明i而非定義 extern int j = 2; ? ? ?//錯(cuò)誤,定義j而非聲明,會(huì)報(bào)錯(cuò),多重定義 int j; ? ? ? ? ? ? ? ? //錯(cuò)誤,重定義,注意這里的j是在全局范圍內(nèi)聲明
3、變量的聲明
當(dāng)鏈接器在一個(gè)全局變量聲明前看到 extern 關(guān)鍵字,
它會(huì)嘗試在其他文件中尋找這個(gè)變量的定義;
可以在頭文件中聲明一個(gè)變量,
在用的時(shí)候包含這個(gè)頭文件就相當(dāng)于聲明了這個(gè)變量。
4、使用 extern 和包含頭文件來(lái)引用函數(shù)有什么區(qū)別呢?
與 include 相比,extern 的引用方式比包含頭文件要更簡(jiǎn)潔:
extern 引用另一個(gè)文件的范圍小,想引用哪個(gè)函數(shù)就用 extern 聲明哪個(gè)函數(shù);
而 include 可以引用另一個(gè)文件的全部?jī)?nèi)容。
這樣做的一個(gè)明顯的好處是,
會(huì)提高程序編譯(預(yù)處理)效率,節(jié)省時(shí)間。
在大型 C++ 程序編譯過(guò)程中,這種差異是非常明顯的。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言 數(shù)據(jù)結(jié)構(gòu)堆排序順序存儲(chǔ)(升序)
這篇文章主要介紹了C語(yǔ)言 數(shù)據(jù)結(jié)構(gòu)堆排序順序存儲(chǔ)(升序)的相關(guān)資料,需要的朋友可以參考下2017-05-05
Opencv實(shí)現(xiàn)對(duì)象提取與測(cè)量
這篇文章主要為大家詳細(xì)介紹了基于Opencv實(shí)現(xiàn)對(duì)象提取與測(cè)量,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05
一篇文章詳解Qt中如何訪問(wèn)數(shù)據(jù)庫(kù)
Qt是一個(gè)廣泛使用的跨平臺(tái)應(yīng)用程序框架,它提供了許多功能,包括數(shù)據(jù)庫(kù)訪問(wèn),這篇文章主要給大家介紹了關(guān)于Qt中如何訪問(wèn)數(shù)據(jù)庫(kù)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07
C++之虛函數(shù)與多態(tài)的實(shí)現(xiàn)原理分析
文章講解了C++多態(tài)原理,通過(guò)虛函數(shù)表(虛表)實(shí)現(xiàn)動(dòng)態(tài)綁定,探討了單繼承、多繼承及菱形繼承中的虛表結(jié)構(gòu),并指出虛函數(shù)不能是內(nèi)聯(lián)或靜態(tài)函數(shù),因需函數(shù)地址存儲(chǔ)于虛表2025-09-09
C++中平衡二叉搜索樹(shù)的模擬實(shí)現(xiàn)
二叉搜索樹(shù)雖可以縮短查找的效率,但如果數(shù)據(jù)有序或接近有序二叉搜索樹(shù)將退化為單支樹(shù),查找元素相當(dāng)于在順序表中搜索元素,效率低下,所以本文給大家介紹了C++平衡二叉的搜索樹(shù)模擬實(shí)現(xiàn)方法,需要的朋友可以參考下2023-09-09
C++共享智能指針shared_ptr的實(shí)現(xiàn)
在C++中沒(méi)有垃圾回收機(jī)制,必須自己釋放分配的內(nèi)存,否則就會(huì)造成內(nèi)存泄露,解決這個(gè)問(wèn)題最有效的方法是使用智能指針,本文主要介紹了C++共享智能指針shared_ptr的實(shí)現(xiàn),感興趣的可以了解一下2023-12-12
簡(jiǎn)單實(shí)現(xiàn)C語(yǔ)言2048游戲
這篇文章主要為大家詳細(xì)介紹了簡(jiǎn)單實(shí)現(xiàn)C語(yǔ)言2048游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05

