许多现有的 GNU 工具都支持许多相对于 Unix 工具的便捷扩展。在实现程序时是否使用这些扩展是一个棘手的问题。
一方面,使用扩展可以使程序更简洁。另一方面,除非其他 GNU 工具可用,否则人们将无法构建该程序。这可能会导致该程序在较少类型的机器上工作。
对于某些扩展,可能很容易提供两种选择。例如,您可以使用“关键字” INLINE
定义函数,并将其定义为一个宏,根据编译器展开为 inline
或空。
一般来说,如果可以简单地不用它们,最好不要使用扩展,但如果它们有很大的改进,则可以使用扩展。
此规则的一个例外是大型、已建立的程序(例如 Emacs),它们在各种系统上运行。在这些程序中使用 GNU 扩展会使许多用户不高兴,因此我们不这样做。
另一个例外是用于编译过程的程序:任何必须使用其他编译器进行编译才能引导 GNU 编译工具的程序。如果这些程序需要 GNU 编译器,那么没有人可以在没有事先安装的情况下编译它们。在某些情况下,这会非常麻烦。