当前位置: 代码迷 >> 综合 >> C++关键字“extern”
  详细解决方案

C++关键字“extern”

热度:82   发布时间:2023-12-02 20:22:38.0

extern的一个基础用法就是,在不包含相关头文件的前提下,声明某个全局变量或者函数(已经定义的),然后使用它。

//func.cppint i = 10;int sum(int a, int b);int sum(int a, int b) {return a + b;
}
//main.cpp#include <iostream>extern int i;
extern int sum(int a, int b);int main(void) {sum(10, i);return 0;
}

extern另一个用法就是被extern "C"修饰的代码会按c语言的方式编译

extern "C" int sum(int a, int b);int sum(int a, int b) {return a + b;
}

值得注意的是,如果函数的定义和声明分开,则只需要在声明的部分添加就行了

另外,还可以一次性修行一大段代码

extern "C" {int sum(int a, int b);void func();
}

 extern "C"的作用是为了C与C++的混合开发

有两点值得注意的是:

1. C语言并不认识extern "C"

2. 编译器会在C++环境中自动定义一个#define __cplusplus放在最顶部

#ifndef __FUNC_H   //防止头文件重复包含
#define __FUNC_H#ifdef __cplusplus //保证在C语言环境下也能使用
extern "C" {
#endif
int sum(int a);
int delta(int a, int b);
#ifdef __cplusplus
}
#endif#endif

 值得一提的是,#pragma once也可以防止头文件重复包含,但问题在于:

1. #ifdef, #ifndef, #endif 受c/c++编译器同时支持,有些老的编译器不支持#pragma once

2. #pragma once只能针对整个文件