可以将C89代码与C99代码混合使用吗?

8

我对与不同C规范相关的许多事情都有疑虑。

如果我在C99中编写一个库,我能否从C89代码中使用它?(仅使用具有符合C89定义的函数)。

例如,这段代码是否可在C89中使用?

共享库的头文件:


#ifdef C99
 void func (double complex a, double complex b); // C99 function
#endif
/* 另一个符合C89的函数 */ void func2 (double a, double b);

谢谢!


只要你正确地 #define C99,应该就可以了。请参考 https://dev59.com/P3I95IYBdhLWcg3w3iDG - BoltClock
@BoltClock 我看到了 :p ,但我的问题更关注 C99 库与 C89 程序的二进制兼容性。 - castarco
@MK复数是C99中的一种“新”类型,用于处理具有“虚数”(imaginary)分量的复数。 - castarco
2个回答

8

C语言并没有关于C89和C99代码二进制兼容性的规定,这完全取决于您为可执行文件使用不同部分的编译器。

如果您可以让库的外部标头对C89编译器友好,我认为它应该可以工作,除了通常需要确保两个编译器可以生成兼容代码的问题。


2

不要使用#ifdef C99,而是使用#if __STDC_VERSION__ > 199900L或类似的方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接