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只能针对整个文件