Linkare codice C e C++

Usare funzioni C in moduli separati (standard o non) nel codice C++

Semplicemente usa le tue funzioni in C come se stessi programmando in C: includi il file header, e poi chiama la funzione. Ad es. in C++, questo programma si compilerà senza problemi:

#include <stdio.h>
#include <stdlib.h>

char buffer[1];

void foo (char *name)
{
  FILE *f;
  if ((f = fopen (name, "r")) == NULL) return;
  fread (buffer, 1, 1, f);
  fclose (f);
}

Dichiarare proprie funzioni C in moduli per poter essere usate col C++

Puoi scrivere alcuni moduli di una applicazione in C, compilarli, e poi linkarli con moduli C++. Per poter chiamare le tue funzioni C precompilate dal codice C++, devi dichiararle in un file header del tipo seguente, e poi usare lo stesso header per compilare il modulo C e il modulo utilizzatore in C++. Ecco come deve apparire il tuo file header del modulo C:
...
#ifdef __cplusplus
extern "C" {
#endif

/* definizioni C */

#ifdef __cplusplus
}
#endif
...
Quella frase extern "C" per l'appunto dice al compilatore che le dichiarazioni seguenti sono di tipo C. Dopo aver indicato questo al compilatore, le definizioni C del modulo nei programmi in C++ saranno utilizzabili come se fossimo in C.

Ndt: mancare quelle direttive nel file header del C in gcc provocherà errori di riferimenti indefiniti nella fase di link. È buona norma, anche quando si scrivono librerie o programmi in C che si vuole possano essere utilizzabili anche in C++ includere quelle linee, che non hanno effetto sui programmi in C. Le #ifdef __cplusplus servono per evitare errori da parte dei compilatori che sono solo per il C e non conoscono la direttiva extern "C"


C++