2013-11-02 38 views
2

我有一個頭文件,我想從.c和.cpp文件中包含。如何佈局函數原型將C與C++混合使用

所以我知道名字改編和extern「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幷包括在那些2個地方...但有沒有簡單的我失蹤?

回答

6

是的,還有更好的辦法。人們通常是這樣做的:如果你想要做不同的東西在C和C

#ifdef __cplusplus 
extern "C" 
{ 
#endif 
    int isPrime(int64_t p); 
#ifdef __cplusplus 
} 
#endif 

++(例如像this),那麼你可以使用你的問題的第二個語法。

+0

啊,當然,謝謝。 –

1
#ifdef __cplusplus 
    extern "C" 
    { 
#endif 
     int isPrime(int64_t p); 
#ifdef __cplusplus 
    } 
#endif 

這樣的話,你可以無需在#ifdef#else案件重複它隨意延長int isPrime(int64_t p);部分。

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" {