2013-03-15 35 views
7

我在一个大单位工作,单位变得如此之大,我决定把它分成3个单位。假设这些单位名称是MainCommonObjectsMain单元使用另外两个单元,并且Objects单元也使用Common单元。所有3个单元中都有代码需要参考这些条件。我可以在单元中定义条件并在其他单元中使用它们吗?

问题是,无论我在哪3个单元中定义了这些条件,其他2个单元都没有看到它们。我当然不想复制他们所有的3个单位。我也不想在项目中定义它们,因为这些单元将被多个项目使用,在这种情况下,所有使用它的项目都不应该关心条件。

我可以用一种方式定义这些条件:所有3个单位都可以看到它们,而无需在项目中定义它们吗?

+3

您可以使用包含文件。 – TLama 2013-03-15 21:31:08

+0

+1。我不明白反对把它们放在项目文件中。如果存在,它不会影响任何其他使用该单元的项目(只要它们使用的是单元而不是编译的.dcu文件),因为项目文件中的定义仅适用于定义被应用。使用这些单位的其他项目不知道定义的任何内容,并编译这些单位而不影响任何内容。然而,将它们放在包含文件中,除非其他项目知道在编译之前适当地更改包含文件。 – 2013-03-15 21:36:09

+0

@Ken因为不管项目在使用这些单元,所有的项目都应该采用相同的条件,而不必担心它们。例如,10个不同的项目可能需要相同的确切条件。此外,我还需要定义12个条件,我不希望最终开发人员在没有理由知道这些条件存在的情况下,在项目中定义全部12个条件。 – 2013-03-15 21:39:08

回答

8

对于条件定义,您唯一的选择是将它们放入一个.inc文件中,然后将其包含在所有三个单元中。

但是,条件定义和$IFDEF不是实现条件编译的唯一方法。你可能会考虑使用布尔常量而不是条件。只要它在所有三个单元中都可见,则可以使用$IF而不是$IFDEF

{$IF MyConstant} 
    .... 
{$IFEND} 

或者,在XE3开始,你可以终止{$IF}{$ENDIF}

就我个人而言,当试图有条件地编译并且不希望条件具有全局范围时,我倾向于赞成后一种方法。

+0

这样的声音确实是唯一的解决方案,谢谢! – 2013-03-15 21:42:31

+0

我喜欢'{$ IF MyConstant}'方法。你倾向于使用什么“MyConstant”?顺便说一句,你为什么不希望你的条件具有全球范围?换句话说:只是对你使用条件编译的内容感兴趣。我目前在所有路径上都处于“无条件”状态,除了可能确保我们软件旧版本的编译器版本兼容性。 – 2013-03-16 09:41:15

+0

@MarjanVenema通常它是用于诊断/调试代码,由于性能考虑,我们无法将其编译为标准版本。如您所知,不要插手项目文件,并且源代码中的本地更改不太透明。 – 2013-03-16 14:18:27

相关问题