2010-12-30 13 views
7

Ho dei dubbi su molte cose relative alle diverse specifiche C.È possibile combinare il codice C89 con il codice C99?

Se si programma una libreria in C99, è possibile utilizzarla dal codice C89? (utilizzando solo le funzioni con le definizioni conformi C89).

esempio, questo codice sarebbe utilizzabile in C89?

intestazione di una libreria condivisa:

 

#ifdef C99 
void func (double complex a, double complex b); // C99 function 
#endif 

/* another C89 compliant function */ 
void func2 (double a, double b); 
 

Grazie in anticipo :)

+0

Probabilmente fino a quando #define C99' correttamente. Vedi http://stackoverflow.com/questions/2115867/is-there-a-define-for-c99 – BoltClock

+0

cos'è "complesso"? –

+0

@BoltClock L'ho visto: p, ma la mia domanda è più orientata alla compatibilità binaria delle librerie C99 con i programmi C89. – castarco

risposta

7

Il linguaggio C non dice nulla circa la compatibilità binaria di C89 e C99 del codice. Questo dipende interamente dai compilatori che usi per le diverse parti dell'eseguibile.

Se è possibile rendere appetibili le intestazioni esterne della libreria per un compilatore C89, non vedo alcun motivo evidente per cui non funzioni, salvo il solito problema di assicurarsi che due compilatori possano generare codice compatibile.

+0

Questa è la risposta corretta. – Joshua

2

Invece di #ifdef C99, utilizzare #if __STDC_VERSION__ > 199900L o simile.