Gra*_*yer 2 c c++ name-mangling extern-c
我有一个标题,我想包含.c和.cpp文件.
所以我知道名字错误和外部"C"所以......
#ifdef __cplusplus
extern "C"
{
int isPrime(int64_t p);
}
#endif
Run Code Online (Sandbox Code Playgroud)
但是当我在.c文件中包含它时,由于它没有看到该函数 #ifdef __cplusplus
所以我最终制作了2份:
#ifdef __cplusplus
extern "C"
{
int isPrime(int64_t p);
}
#else
int isPrime(int64_t p);
#endif
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来做到这一点...我想要制作另一个名为prototypes.h的标题,并将其包含在那两个地方......但是我有什么简单的遗漏吗?
是的,还有更好的方法.人们通常这样做:
#ifdef __cplusplus
extern "C"
{
#endif
int isPrime(int64_t p);
#ifdef __cplusplus
}
#endif
Run Code Online (Sandbox Code Playgroud)
如果你想在c和c ++中做一些不同的事情(比如这个),那么你可以在你的问题中使用第二种语法.
另一种方法如下
// intro
#ifdef __cplusplus
#define EXTERN_C extern "C"
#else
#define EXTERN_C
#endif
// content
EXTERN_C int isPrime(int64_t p);
// many other functions declared with EXTERN_C
Run Code Online (Sandbox Code Playgroud)
通常,"intro"部分放在一些公共头文件中供大家使用.
这种格式的优点是每个声明都被立即视为extern "C".读者不必四处寻找可能extern "C" {