我启用了“不安全代码”警告,我想知道如何解决以下警告:
W1047不安全代码'^ operator'
此外,为什么这被视为“不安全代码”?
答案 0 :(得分:8)
您使用的数据类型或操作静态代码分析无法证明它不会覆盖内存。此类代码可被视为安全风险。
例如,使用GetMem可以引发此警告,因为内存块没有关联的类型。
实际上只有两种方法可以避免这些警告:
在某些情况下,这两个选项都很有用。例如,考虑Embarcadero的支持动态数组的Delphi RTL代码。它需要能够分配内存,并使用这种不安全的操作访问该内存。这种基础库代码需要能够使用不安全的操作。考虑到您自己的代码,如果您需要执行不安全的代码,您可能将其隔离到单个单元或单元的单个部分,并禁用该代码的警告。
开到第二项。您可能可以使用指针使用其他构造替换代码。例如,您可能拥有使用指针算法的代码,而不是使用数组编写。
我认为这些警告是introduced to help developers migrate code to the long since abandoned Delphi .net compiler。所以你可能会认为,既然你没有瞄准.net,你可以简单地禁用这些警告。另一方面,我可以看到启用警告可能有用的场景,并警告可能更具风险的代码区域。选择是你的。
答案 1 :(得分:5)
这些警告仅适用于.NET兼容性(以及错误的IMNSHO)。禁用并忘记它们。