extern、static       

extern

被extern关键字修饰的变量或函数表明目标来自外部的模块

变量

表明被extern修饰的变量来自其他文件

函数

函数都是全局的,所有默认的函数声明和定义都是extern

extern”C”

C++语法
C++的编译器为了允许重载,符号表中的函数名会根据一定规则更改,如果cpp引用了C里面的函数,编译后cpp里面的函数名字与c里面的函数名字不一致,导致链接的时候cpp目标文件找不到符号
若cpp文件引用在extern”C”{}中声明的函数,编译器都根据C语言的函数链接命名原则对函数命名,令cpp里的函数和extern”C”{}里的函数同名,防止cpp里的函数符号未定义

reference

http://www.firedragonpzy.com.cn/wp-content/uploads/2013/02/effective-c.pdf

static

变量

函数