C++中的頭文件與Extern(外部函數(shù)調用)方式
C++頭文件與Extern(外部函數(shù)調用)
⒈ 頭文件引用
⒉ extern調用同一個項目中的其他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; }
通過extern和頭文件來引用函數(shù),有啥區(qū)別 ?
1、extern 應用于全局變量,函數(shù)或模板聲明
說明該符號具有外部鏈接 (external linkage) 屬性(這個符號在別處定義)。
2、變量可以聲明多次,但只能定義一次
在程序中變量可以聲明多次,但只能定義一次。
一般而言,定義就是聲明。
但 C++ 中由于 extern 的緣故,變量的聲明和定義是可以分開的。
凡是沒有帶 extern 的聲明同時也都是定義。
而對函數(shù)而言,帶有{}是定義,否則是聲明。
int i; ? ? ? ? ? ? ? ?//聲明并定義i int j = 1; ? ? ? ? ? ?//聲明并定義j double max(double d1,double d2){} //函數(shù)定義 extern double max(double d1,double d2); ?//函數(shù)聲明
如果想聲明一個變量而非定義它,
就在變量名前添加關鍵字 extern,且不要顯式的初始化變量。
extern int i; ? ? ? ? ?//聲明i而非定義 extern int j = 2; ? ? ?//錯誤,定義j而非聲明,會報錯,多重定義 int j; ? ? ? ? ? ? ? ? //錯誤,重定義,注意這里的j是在全局范圍內聲明
3、變量的聲明
當鏈接器在一個全局變量聲明前看到 extern 關鍵字,
它會嘗試在其他文件中尋找這個變量的定義;
可以在頭文件中聲明一個變量,
在用的時候包含這個頭文件就相當于聲明了這個變量。
4、使用 extern 和包含頭文件來引用函數(shù)有什么區(qū)別呢?
與 include 相比,extern 的引用方式比包含頭文件要更簡潔:
extern 引用另一個文件的范圍小,想引用哪個函數(shù)就用 extern 聲明哪個函數(shù);
而 include 可以引用另一個文件的全部內容。
這樣做的一個明顯的好處是,
會提高程序編譯(預處理)效率,節(jié)省時間。
在大型 C++ 程序編譯過程中,這種差異是非常明顯的。
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
C語言數(shù)據(jù)結構二叉樹先序、中序、后序及層次四種遍歷
這篇文章主要介紹了C語言數(shù)據(jù)結構二叉樹先序、中序、后序及層次四種遍歷方式,具有一定的知識性參考價值,需要的小伙伴可以先看一下2022-02-02