c语言 - 我应该使用哪个:C99的complex.h库还是"GNU Extensions for Complex Number Types"?



我喜欢"GNU Extensions for Complex Number Types"的语法,但我知道它不像complex.h那样是标准的。那么,我应该使用哪个?

这实际上是一个对你来说最重要的问题。

如果有一天你可能想在 gnu 以外的任何编译器上使用代码,那么使用 <complex.h> 中的标准"东西"可能是有意义的。

如果你有理由确定你只针对 gnu 编译器,或者至少考虑它们提供的语法改进值得你最终不得不重写代码的可能性,那么使用 gnu 扩展可能更有意义。

至少对我来说,这将归结为一个相当简单的情况:如果代码是(甚至是合理的)可移植的,否则我也会遵循复杂类型的标准。如果代码使用了足够的 gnu 扩展,否则移植到另一个编译器可能需要(几乎)完全重写,那么如果你更喜欢 gnu 扩展,不妨使用 gnu 扩展。

我还应该补充一点,移植并不是唯一的考虑因素,但它们都可以协同工作。可读性的工作方式几乎相同 - 如果你使用了足够多的GNU扩展,以至于有人几乎需要了解GNU扩展来阅读代码,那么使用他们的扩展进行复杂不会有点损失。如果代码足够标准,以至于有人可以阅读它,那么仅为复杂添加专有扩展可能不是一个好主意。

任何一个都会导致可移植性问题。您必须根据需要使用哪组编译器来决定。

当然,C99的<complex.h>是标准语言的一部分 - 但并非所有编译器都支持C99。特别是,Microsoft表示他们不打算支持C99或任何更高标准,除了那些恰好存在于C++中的功能。(C++具有复数支持,但作为一个库,而不是像 C99 那样作为一组内置类型。

另一方面,gcc

扩展仅适用于 gcc,或与 gcc 充分兼容的编译器。

我怀疑<complex.h>将比 gcc 扩展更具可移植性;您将无法将Microsoft的编译器与任何一个一起使用,但任何支持 C99 的实现都将支持 <complex.h>

(另一种选择是使用 C++ 而不是 C,并使用 C++ 的<complex>

最新更新