我有一个标题,我想要包含.c和.cpp文件。
所以我知道名字错误和外部“C”所以......
#ifdef __cplusplus
extern "C"
{
int isPrime(int64_t p);
}
#endif
但当我在.c文件中包含它时,由于#ifdef __cplusplus
所以我最终制作了2份副本:
#ifdef __cplusplus
extern "C"
{
int isPrime(int64_t p);
}
#else
int isPrime(int64_t p);
#endif
有没有更好的方法来做到这一点...我想要制作另一个名为prototypes.h的标题,并将其包括在那两个地方......但是我有什么简单的遗漏吗?
答案 0 :(得分:6)
是的,还有更好的方法。人们通常这样做:
#ifdef __cplusplus
extern "C"
{
#endif
int isPrime(int64_t p);
#ifdef __cplusplus
}
#endif
如果你想在c和c ++中做一些不同的事情(例如this),那么你可以在你的问题中使用第二种语法。
答案 1 :(得分:6)
另一种方法如下
// 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
通常情况下,“介绍”部分放在一些常用的头文件中供大家使用。
此格式的优点是每个声明都会立即显示为extern "C"
。读者无需搜索可能的extern "C" {
答案 2 :(得分:1)
#ifdef __cplusplus
extern "C"
{
#endif
int isPrime(int64_t p);
#ifdef __cplusplus
}
#endif
这样,您可以在int isPrime(int64_t p);
和#ifdef
个案例中随意扩展#else
部分,而无需重复{。}}。