2010-12-30 13 views
7

Mam wątpliwości dotyczące wielu rzeczy związanych z różnymi specyfikacjami C.Możliwe jest mieszanie kodu C89 z kodem C99?

Jeśli zaprogramuję bibliotekę w C99, czy mogę użyć jej z kodu C89? (używając tylko funkcji zgodnych z C89).

przykład, ten kod może być użyty w C89?

Nagłówek udostępnionej biblioteki:

 

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

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

góry dzięki :)

+0

Prawdopodobnie tak długo jak "#define C99" poprawnie. Zobacz http://stackoverflow.com/questions/2115867/is-there-a-define-for-c99 – BoltClock

+0

co jest "złożone"? –

+0

@BoltClock Widziałem to: p, ale moje pytanie jest bardziej zorientowane na binarną kompatybilność bibliotek C99 z programami C89. – castarco

Odpowiedz

7

Język C nie mówią nic o binarnej kompatybilności C89 i C99 kodu. To zależy wyłącznie od kompilatorów, których używasz w różnych częściach pliku wykonywalnego.

Jeśli możesz sprawić, że zewnętrzne nagłówki twojej biblioteki będą smaczne dla kompilatora C89, nie widzę żadnego oczywistego powodu, dla którego to by nie zadziałało, z wyjątkiem zwykłego problemu upewnienia się, że dwa kompilatory mogą generować kompatybilny kod.

+0

To jest poprawna odpowiedź. – Joshua

2

Zamiast #ifdef C99, należy użyć #if __STDC_VERSION__ > 199900L lub podobnego.

Powiązane problemy