如果没有找到定义,如何包含内容

时间:2013-08-23 15:45:45

标签: delphi uses-clause

我在设置类中使用以下代码来确定要使用的内容。 但是现在我遇到了一个问题,我忘记了将正确的.INC文件复制到我的项目文件夹中,这给了我一个AV,因为找不到任何定义。 我如何确保如果没有找到任何定义,那么U_SettingsConnIni总是在使用部分

 uses
  Dialogs, Forms, SysUtils,
{$IFDEF SETTINGSINI}
  U_SettingsConnIni,
{$ENDIF}
{$IFDEF SETTINGSREG}
  U_SettingsConnReg,
{$ENDIF}
{$IFDEF SETTINGSXML}
  U_SettingsConnXml,
{$ENDIF}
  U_SectionNames;

3 个答案:

答案 0 :(得分:3)

就像普通的if块一样,$ifdef编译器指令支持$else。此外,它们可以嵌套。

uses
  Dialogs, Forms, SysUtils,
{$IFDEF SETTINGSREG}
  U_SettingsConnReg,
{$ELSE}
  {$IFDEF SETTINGSXML}
  U_SettingsConnXml,
  {$ELSE}
  U_SettingsConnIni,
  {$ENDIF}
{$ENDIF}
  U_SectionNames;

答案 1 :(得分:3)

这种情况更适合功能更强大的$IF而不是相当有限的$IFDEF

uses
  Dialogs, Forms, SysUtils,
{$IF Defined(SETTINGSREG)}
  U_SettingsConnReg,
{$ELSEIF Defined(SETTINGSXML)}
  U_SettingsConnXml,
{$ELSE}
  U_SettingsConnIni,
{$IFEND}
  U_SectionNames;

在Delphi的最新版本中,如果您愿意,可以在此使用$ENDIF而不是$IFEND

如果您想在没有定义条件的情况下失败,您可以这样做:

uses
  Dialogs, Forms, SysUtils,
{$IF Defined(SETTINGSREG)}
  U_SettingsConnReg,
{$ELSEIF Defined(SETTINGSXML)}
  U_SettingsConnXml,
{$ELSEIF Defined(SETTINGSINI)}
  U_SettingsConnIni,
{$ELSE}
  {$Message Fatal 'Settings file format conditional must be defined'}
{$IFEND}
  U_SectionNames;

答案 2 :(得分:0)

另一种方法(不完全回答您的问题),如果您知道其中一个定义 ,则确保编译失败。在你的情况下:

{$IFNDEF SETTINGSINI}
{$IFNDEF SETTINGSREG}
{$IFNDEF SETTINGSXML}
This line does not compile
{$ENDIF}
{$ENDIF}
{$ENDIF}

这样,如果没有设置条件定义,编译器就会阻塞This line does not compile