在哪里可以了解#ifdef?

| 我看到这经常用于使模块与GHC和Hugs兼容,但是google并没有帮助我更多地了解它。 我可以在条件中放入什么?我可以根据使用的\'base \'版本来确定模块的各个部分吗? 编辑3/2017:这是一个很好的资源:https://guide.aelve.com/haskell/cpp-vww0qd72     
已邀请:
        GHC文档中有一个与C预处理器有关的部分,其中记录了一些预定义的 预处理器宏。 Cabal文档中有一个与条件编译有关的部分,给出了与“ 0”有关的示例。如果要编写便携式包装,则无论如何都应使用Cabal。     
        除了GHC定义的非常有用的标志(操作系统,体系结构等)之外,在使用cabal时还定义了其他标志和宏。 检查软件包版本 这是crypto-api的一种用法,用于检查所使用的
tagged
软件包的版本:
#if MIN_VERSION_tagged(0,2,0)
import Data.Proxy
#endif
自定义CPP基于Cabal标志进行定义 您可以根据阴谋标记定义CPP符号。这是pureMD5(来自.cabal文件)的(不必要复杂的)示例:
 if arch(i386) || arch(x86_64)
   cpp-options: -DFastWordExtract
在the4ѭ模块内部,您可以使用
#ifdef
,例如:
#ifdef FastWordExtract
getNthWord n b = inlinePerformIO (unsafeUseAsCString b (flip peekElemOff n . castPtr))
#else
... other code ...
#endif
有关更多信息,请参见Cabal用户指南。该页面包含您可能正在寻找的“条件编译”信息。     
        C预处理程序(CPP)使用ѭ5和朋友。它们提供了一种有条件地编译代码的方法。您可以通过在文件顶部添加编译指示enable8 the来启用CPP。 许多处理Haskell代码的程序都会为预处理器设置一些宏(例如,GHC将GHC的版本设置为“ 9”),因此可以有条件地编译代码,例如对Hugs和GHC使用不同的属性库。     
        如果使用Has10ѭ选项运行Haskell编译器,它将首先使用CPP(C预处理器)预处理源文件。 看一下第4.11.3节。这里影响C预处理程序的选项。     

要回复问题请先登录注册