参考文章:
其实,extern “C” 应该分为两部分来理解。
(1)extern
修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。
(2)“C”
用于指示C或者C++函数的调用规范。比如在C++中调用C库函数,就需要在C++程序中用extern “C”声明要引用的函数。这是给链接器用的,告诉链接器在链接的时候用C函数规范来链接。
主要原因是C++和C程序编译完成后在目标代码中命名规则不同(linux下可以使用nm命令来查看c和c++的命名区别),用此来解决名字匹配的问题。
(3)顺带着扯一下,与extern对应的关键字是 static,被它修饰的全局变量和函数只能在本模块中使用。