为了在C/C++中支持多个平台,可以使用预处理器来启用条件编译。例如:
#ifdef _WIN32
#include <windows.h>
#endif
你怎样才能在Ada中实现这个?Ada有预处理器吗?
为了在C/C++中支持多个平台,可以使用预处理器来启用条件编译。例如:
#ifdef _WIN32
#include <windows.h>
#endif
是的,已经有了。
如果您正在使用GNAT编译器,可以使用gnatprep
进行预处理。如果您使用GNAT编程工作室,则可以配置项目文件以定义一些条件编译开关,例如:
#if SOMESWITCH then
-- Your code here is executed only if the switch SOMESWITCH is active in your build configuration
#end if;
gnatmake
或gprbuild
,因此您不必手动运行gnatprep
。 这非常有用,例如,当您需要使用不同的交叉编译器为几个不同的操作系统编译相同的代码时。不,它没有。
如果你真的想要一个,有一些方法可以获得一个(使用C语言,使用独立的预处理器等)。然而,我会反对这样做。不拥有预处理器是一个有意的设计决策。整个预处理器的概念在Ada中非常不适用。
C语言预处理器的大部分用途在Ada中都可以通过其他更可靠的方式实现。唯一的主要例外是在源文件中进行小的更改以支持跨平台。考虑到在典型的跨平台C程序中这种方式被滥用的程度,我仍然很高兴Ada中没有对其提供支持。很少有C/C++开发人员能够控制自己,使更改保持“小”的程度。结果可能有效,但通常几乎无法阅读。
完成此操作的典型Ada方式是将不同的代码放在不同的文件中,并使用构建系统在编译时选择它们之间的区别。Make足够强大,可以帮助您完成此操作。