2013-11-02 9 views
2

У меня есть заголовок, который я хочу включить из .c и .cpp-файлов.Как сделать макет Функция Прототипы смешивания C с C++

так что я знаю о имя коверкая и ехЬегп «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

Да, есть лучший способ. Люди, как правило, делают это:

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

Если вы хотите сделать что-то другое в С и С ++ (как, например, this), то вы можете использовать 2-й синтаксис в вашем вопросе.

+0

ах, конечно же, спасибо. –

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

Таким образом, вы можете расширить int isPrime(int64_t p); часть произвольно, не повторяя его в своих #ifdef и #else случаях.

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

 Смежные вопросы

  • Нет связанных вопросов^_^