Delphi的$WARN编译指令中的标识符

51

Delphi有一个$WARN编译指令,允许选择性地启用或禁用特定警告。Delphi 2009帮助文件描述了其语法:

{$WARN identifier ON|OFF}

但它只列出了6个警告的标识符。

我想要一个完整的所有警告标识符的列表。 特别是,我想知道 Delphi 2009 中隐式字符串转换警告 W1057 和 W1058 的标识符。

我已经猜到了隐式 Ansi->Unicode 转换 (W1057) 的标识符:

{$WARN IMPLICIT_STRING_CAST OFF}

通过谷歌搜索,我找到了另一个:

{$WARN IMPLICIT_STRING_CAST_LOSS OFF}

虽然那解决了我的急需,但我仍想知道警告标识符的完整列表。这些东西应该被文档化。

5个回答

61

达里安是正确的,DCCStrs.pas列出了Delphi编译器使用的标识符。我没有想到去搜索源代码,因为Delphi不包含其编译器的源代码。

我从该文件中提取了提示和警告的标识符:

  • {$WARN ASG_TO_TYPED_CONST OFF} 关闭将变量赋值给类型常量的警告。
  • {$WARN BAD_GLOBAL_SYMBOL OFF} 关闭全局符号不正确的警告。
  • {$WARN BOUNDS_ERROR OFF} 关闭数组下标越界的警告。
  • {$WARN CASE_LABEL_RANGE OFF} 关闭case语句中label范围错误的警告。
  • {$WARN COMBINING_SIGNED_UNSIGNED OFF} 关闭混合使用有符号和无符号类型的警告。
  • {$WARN COMPARING_SIGNED_UNSIGNED OFF} 关闭比较有符号和无符号类型的警告。
  • {$WARN COMPARISON_FALSE OFF} 关闭对 false 值进行比较的警告。
  • {$WARN COMPARISON_TRUE OFF} 关闭对 true 值进行比较的警告。
  • {$WARN CONSTRUCTING_ABSTRACT OFF} 关闭创建抽象类实例的警告。
  • {$WARN CVT_ACHAR_TO_WCHAR OFF} 关闭从 AnsiChar 到 WideChar 类型转换时可能会丢失数据的警告。
  • {$WARN CVT_NARROWING_STRING_LOST OFF} 关闭缩小字符串类型时可能会丢失数据的警告。
  • {$WARN CVT_WCHAR_TO_ACHAR OFF} 关闭从 WideChar 到 AnsiChar 类型转换时可能会丢失数据的警告。
  • {$WARN CVT_WIDENING_STRING_LOST OFF} 关闭扩大字符串类型时可能会丢失数据的警告。
  • {$WARN DUPLICATE_CTOR_DTOR OFF} 关闭重复构造函数或析构函数的警告。
  • {$WARN DUPLICATES_IGNORED OFF} 关闭忽略重复项的警告。
  • {$WARN EXPLICIT_STRING_CAST OFF} 关闭将字符串强制转换为其他类型的警告。
  • {$WARN EXPLICIT_STRING_CAST_LOSS OFF} 关闭将字符串转换为其他类型时可能会丢失数据的警告。
  • {$WARN FILE_OPEN OFF} 关闭打开文件失败的警告。
  • {$WARN FILE_OPEN_UNITSRC OFF} 关闭在源代码中未找到单元文件的警告。
  • {$WARN FOR_LOOP_VAR_UNDEF OFF} 关闭循环变量未定义的警告。
  • {$WARN FOR_LOOP_VAR_VARPAR OFF} 关闭使用 var 参数作为循环变量的警告。
  • {$WARN FOR_VARIABLE OFF} 关闭使用非迭代器变量进行 for-in 循环的警告。
  • {$WARN GARBAGE OFF} 关闭垃圾数据访问的警告。
  • {$WARN HIDDEN_VIRTUAL OFF} 关闭隐藏虚方法的警告。
  • {$WARN HIDING_MEMBER OFF} 关闭隐藏成员变量的警告。
  • {$WARN HPPEMIT_IGNORED OFF} 关闭忽略 HPP 文件中的指令的警告。
  • {$WARN HRESULT_COMPAT OFF} 关闭与 HRESULT 类型不兼容的警告。
  • {$WARN IMAGEBASE_MULTIPLE OFF} 关闭可执行文件镜像基地址不是 64K 的倍数的警告。
  • {$WARN IMPLICIT_IMPORT OFF} 关闭隐式导入函数库的警告。
  • {$WARN IMPLICIT_STRING_CAST OFF} 关闭将字符串隐式转换为其他类型的警告。
  • {$WARN IMPLICIT_STRING_CAST_LOSS OFF} 关闭将字符串隐式转换为

9
在任何单位的CTRL-O键中,按下O键,Delphi将会放置当前已激活选项的完整列表。此快捷方式的优点是它很可能在未来的Delphi版本中也能用(并提供新的警告/选项)。 - Мסž

27

我查阅了帮助文档,没有找到完整的列表...所以在代码中搜索,看起来编译器警告常量都列在了:CodeGear\RAD Studio\6.0\sources\toolsapi\DCCStrs.pas

搜索"Implicit_String_Cast_Loss",你会看到常量sIMPLICIT_STRING_CAST_LOSS = 'DCC_IMPLICIT_STRING_CAST_LOSS';

我想其他DCC_xxx字符串及其相应的X_true/_false/_error定义应该也是你需要的。

自从Delphi 7以来,在线帮助一直不是很好。


注意:此内容现已在帮助文档中记录:http://docwiki.embarcadero.com/RADStudio/Rio/zh-cn/Warning_messages_(Delphi) - Darian Miller

27

在Delphi 2009文档中没有提到的另一件事:

$WARN指令现在有第三个选项ERROR,除了ON和OFF之外。因此,你可以使用以下内容:

{$WARN IMPLICIT_STRING_CAST OFF} to disable the warning
{$WARN IMPLICIT_STRING_CAST ON} to enable warning
{$WARN IMPLICIT_STRING_CAST ERROR} to turn the warning into an error

7

这样的东西应该被记录下来

截至今天,标识符及其编译器警告号码的完整列表已在文档中列出:

http://docwiki.embarcadero.com/RADStudio/en/Warning_messages_(Delphi)

摘录:

$WARN指令中的标识符可以具有以下任何值:

|      警告      | 标识符 |
|:--------------:|:------:|
| SYMBOL_DEPRECATED | W1000 |
| SYMBOL_LIBRARY    | W1001 |
| (...)             | (...)  |

2
如果您按下Ctrl+O两次,它将在单元顶部添加所有编译器指令,包括所有警告。找到您想要的那个并删除其余的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接