我正在为一个C程序编写C++共享库。但是,我有关于extern
和extern "C"
的问题。
请考虑以下代码:
我的头文件如下:
#ifdef __cplusplus
extern "C" int global;
extern "C" int addnumbers(int a, int b);
#else
extern int global;
#endif
这个完美地运作了;我只需要声明一下
int global;
在我的.cpp或.c文件中,我可以使用extern "C"
或extern
来声明全局变量。但是我不明白的是:
extern "C"
和extern
在这里有什么区别?我尝试注释掉extern "C" int global
,它仍然可以正常工作!为什么呢?
我知道extern "C"
用于创建C语言链接。这就是为什么我有extern "C" int addnumbers(int,int)
的原因。换句话说,如果我想编写一个C++函数供C程序使用,我会使用extern "C"
。那么,全局变量怎么办——我猜这里的情况不同?我希望C程序使用名为global
的C++变量,但我可以使用extern
而不是extern "C"
。为什么呢?这对我来说不太直观。
注释:我认为这不是重复问题,因为我想知道在将变量与函数用作参数时的区别。