Можно ли смешивать код C89 с кодом C99? - PullRequest
7 голосов
/ 30 декабря 2010

У меня есть сомнения относительно многих вещей, связанных с различными спецификациями C.

Если я запрограммирую библиотеку на C99, могу ли я использовать ее из кода C89? (используя только функции с определениями, совместимыми с C89).

Например, этот код будет использоваться в C89?

Заголовок разделяемой библиотеки:


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

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

Заранее спасибо:)

Ответы [ 2 ]

7 голосов
/ 30 декабря 2010

Язык C ничего не говорит о двоичной совместимости кода C89 и C99. Это полностью зависит от компиляторов, которые вы используете для различных частей исполняемого файла.

Если вы можете сделать внешние заголовки вашей библиотеки приемлемыми для компилятора C89, я не вижу какой-либо очевидной причины, по которой он не будет работать, за исключением обычной проблемы, заключающейся в том, чтобы два компилятора могли генерировать совместимый код.

2 голосов
/ 30 декабря 2010

Вместо #ifdef C99 используйте #if __STDC_VERSION__ > 199900L или аналогичный.

...