C++中的头文件与Extern(外部函数调用)方式
作者:Kylee Brady
这篇文章主要介绍了C++中的头文件与Extern(外部函数调用)方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
C++头文件与Extern(外部函数调用)
⒈ 头文件引用
⒉ extern调用同一个项目中的其他cpp文件中的函数
▶【 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和头文件来引用函数,有啥区别 ?
1、extern 应用于全局变量,函数或模板声明
说明该符号具有外部链接 (external linkage) 属性(这个符号在别处定义)。
2、变量可以声明多次,但只能定义一次
在程序中变量可以声明多次,但只能定义一次。
一般而言,定义就是声明。
但 C++ 中由于 extern 的缘故,变量的声明和定义是可以分开的。
凡是没有带 extern 的声明同时也都是定义。
而对函数而言,带有{}是定义,否则是声明。
int i; //声明并定义i
int j = 1; //声明并定义j
double max(double d1,double d2){} //函数定义
extern double max(double d1,double d2); //函数声明如果想声明一个变量而非定义它,
就在变量名前添加关键字 extern,且不要显式的初始化变量。
extern int i; //声明i而非定义 extern int j = 2; //错误,定义j而非声明,会报错,多重定义 int j; //错误,重定义,注意这里的j是在全局范围内声明
3、变量的声明
当链接器在一个全局变量声明前看到 extern 关键字,
它会尝试在其他文件中寻找这个变量的定义;
可以在头文件中声明一个变量,
在用的时候包含这个头文件就相当于声明了这个变量。
4、使用 extern 和包含头文件来引用函数有什么区别呢?
与 include 相比,extern 的引用方式比包含头文件要更简洁:
extern 引用另一个文件的范围小,想引用哪个函数就用 extern 声明哪个函数;
而 include 可以引用另一个文件的全部内容。
这样做的一个明显的好处是,
会提高程序编译(预处理)效率,节省时间。
在大型 C++ 程序编译过程中,这种差异是非常明显的。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
