Kompilasi kode C seperti ini:
gcc -c -o somecode.o somecode.c
Kemudian kode C++ seperti ini:
g++ -c -o othercode.o othercode.cpp
Kemudian tautkan keduanya, dengan penghubung C++:
g++ -o yourprogram somecode.o othercode.o
Anda juga harus memberi tahu kompiler C++ bahwa header C akan datang saat Anda menyertakan deklarasi untuk fungsi C. Jadi othercode.cpp
dimulai dengan:
extern "C" {
#include "somecode.h"
}
somecode.h
harus berisi sesuatu seperti:
#ifndef SOMECODE_H_
#define SOMECODE_H_
void foo();
#endif
(Saya menggunakan gcc dalam contoh ini, tetapi prinsipnya sama untuk semua kompiler. Bangun secara terpisah sebagai C dan C++, lalu tautkan bersama.)
Biarkan saya mengumpulkan potongan-potongan dari jawaban dan komentar lain, untuk memberi Anda contoh dengan kode C dan C++ yang dipisahkan dengan rapi:
Bagian C:
foo.h :
#ifndef FOO_H
#define FOO_H
void foo(void);
#endif
foo.c
#include "foo.h"
void foo(void)
{
/* ... */
}
Kompilasi ini dengan gcc -c -o foo.o foo.c
.
Bagian C++:
bar.cpp
extern "C" {
#include "foo.h" //a C header, so wrap it in extern "C"
}
void bar() {
foo();
}
Kompilasi ini dengan g++ -c -o bar.o bar.cpp
Lalu tautkan semuanya:
g++ -o myfoobar foo.o bar.o
Dasar Pemikiran: Kode C harus berupa kode C biasa, bukan #ifdef
s untuk "mungkin suatu hari nanti saya akan menyebutnya dari bahasa lain". Jika beberapa pemrogram C++ memanggil fungsi C Anda, itu adalah mereka masalah bagaimana melakukan itu, bukan milikmu. Dan jika Anda adalah programmer C++, maka header C mungkin bukan milik Anda dan Anda tidak boleh mengubahnya, jadi penanganan nama fungsi yang tidak terurai (yaitu extern "C"
) termasuk dalam kode C++ Anda.
Anda mungkin, tentu saja, menulis sendiri header C++ kenyamanan yang tidak melakukan apa pun kecuali membungkus header C menjadi extern "C"
deklarasi.