【发布时间】:2016-11-03 15:04:57
【问题描述】:
我正在编写一个 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" int global 并且它有效!为什么?
我知道extern "C" 用于进行C 链接。这就是为什么我有extern "C" int addnumbers(int,int)。换句话说,如果我想写一个用于 C 程序的 C++ 函数,我写extern "C"。现在,全局变量呢?我猜这里的情况有所不同?我希望 C 程序使用名为 global 的 C++ 变量,但我可以使用 extern 而不是 extern "C"。这是为什么?这对我来说并不直观。
评论:我不认为这是重复的,因为我问的是当你将它用于变量和函数时有什么区别。
【问题讨论】:
-
我不认为这是重复的,因为我问的是当你将它用于变量和函数时有什么区别。
-
我邀请您在您的问题中更清楚地说明这一点。
-
虽然我很难发现
extern "C"和extern之间的区别和extern "C"和extern用于变量。也许问题是extern "C"用于函数和变量时是否不同? 答案很简单“否” -
你不会看到变量的 extern "C" 和 extern 之间的区别,因为编译器对变量名不做任何事情。它只影响函数名。