2010-12-30 12 views
7

Tengo dudas sobre muchas cosas relacionadas con las diferentes especificaciones C.¿Es posible mezclar el código C89 con el código C99?

Si programo una biblioteca en C99, ¿puedo usarla desde el código C89? (usando solo las funciones con definiciones compatibles con C89).

ejemplo, este código sería utilizable en C89?

cabecera de una biblioteca compartida:

 

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

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

Gracias de antemano :)

+0

Probablemente siempre y cuando '' defina C99' correctamente. Consulte http://stackoverflow.com/questions/2115867/is-there-a-define-for-c99 – BoltClock

+0

¿Qué es "complejo"? –

+0

@BoltClock Lo vi: p, pero mi pregunta está más orientada a la compatibilidad binaria de las bibliotecas C99 con los programas C89. – castarco

Respuesta

7

El lenguaje C no dice nada acerca de la compatibilidad binaria del código C89 y C99. Eso depende completamente de los compiladores que usa para las diferentes partes del ejecutable.

Si puede hacer que los encabezados externos de su biblioteca sean aceptables para un compilador C89, no veo ninguna razón obvia por la que no funcionaría, excepto por el problema habitual de asegurarse de que dos compiladores puedan generar código compatible.

+0

Esta es la respuesta correcta. – Joshua

2

En lugar de #ifdef C99, use #if __STDC_VERSION__ > 199900L o similar.

Cuestiones relacionadas