2010-12-30 6 views
7

Ich habe Zweifel über viele Dinge im Zusammenhang mit den verschiedenen C-Spezifikationen.Es ist möglich, C89-Code mit C99-Code zu mischen?

Wenn ich eine Bibliothek in C99 programmiere, kann ich es aus C89-Code verwenden? (nur die Funktionen mit C89-konformen Definitionen verwenden).

Beispiel, wäre dieser Code in C89 verwendbar?

Headers einer Shared Library:

 

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

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

Vielen Dank im Voraus :)

+0

Wahrscheinlich so lange wie Sie '# C99' korrekt definieren. Siehe http://stackoverflow.com/questions/2115867/is-there-a-define-for-c99 – BoltClock

+0

Was ist "komplex"? –

+0

@BoltClock Ich sah es: p, aber meine Frage ist mehr auf die binäre Kompatibilität von C99-Bibliotheken mit C89-Programmen ausgerichtet. – castarco

Antwort

7

Die Sprache C sagt nichts über die binäre Kompatibilität von C89 und C99-Code. Das hängt vollständig von den Compilern ab, die Sie für die verschiedenen Teile der ausführbaren Datei verwenden.

Wenn Sie die externen Header Ihrer Bibliothek für einen C89-Compiler wohlschmeckend machen können, sehe ich keinen offensichtlichen Grund, warum es nicht funktionieren würde, abgesehen von dem üblichen Problem, dass zwei Compiler kompatiblen Code erzeugen können.

+0

Dies ist die richtige Antwort. – Joshua

2

Verwenden Sie anstelle von #ifdef C99#if __STDC_VERSION__ > 199900L oder ähnliches.

Verwandte Themen