gpt4 book ai didi

delphi - maxint 在哪里定义 - 重复定义?

转载 作者:行者123 更新时间:2023-12-03 04:04:15 60 4
gpt4 key购买 nike

我有一个项目组,其中所有 Win32 程序都具有相同的 ..\PatchLibs 搜索路径。此文件夹包含已修补的 System.Win.Ctrl.pas,其中包含:

{$IFDEF WIN32}
function _malloc(size: size_t): Pointer; cdecl;
begin
if (size > MaxInt) then
begin
Result := Nil
end
else
begin
try
Result := AllocMem(size);
except
Result := Nil;
end;
end;
end;

[此补丁消除了 midaslib (QC 104337) 中的错误]

问题:

其中一个(较小的)项目在“MaxInt”行上给出了 W1023(“比较有符号和无符号类型”)编译器警告,所有其他项目都在构建时没有警告。
所有项目的 use 语句或项目文件中都没有 System.Win.Ctrl。

考虑到 Maxint 可能有两个类型常量定义,我想在 Maxint 前面加上“正确”的单位名称,但找不到它的定义。
我已经搜索了所有可用的 c:\program files (x86)\embarcadero\rad studio\9.0\source*.* 文件,但没有找到定义。
System.MaxInt 可以工作,但不能消除警告。
Typecasting Cardinal(MaxInt) 删除了警告,但我仍然更喜欢“完全合格”的解决方案。
(size_t定义为ULONG_PTR定义为NativeUInt)
我发现了 Quality Central 问题 102873、69836 和 53202,但这些引用了重复的定义 C++ .h 头文件

我对多个定义的假设是否正确?如果是这样,单位前缀应该是什么?最重要的是:为什么我只收到针对该项目构建的编译器警告?

最佳答案

MaxInt 在系统单元中声明。我很确定这是这里范围内唯一的 MaxInt。您看到的警告是准确的。 MaxInt 有符号,size_t 无符号。您应该抑制该警告。例如,您可以将 MaxInt 转换为 size_t:

if size > size_t(MaxInt) then

没关系,因为 MaxInt 在 size_t 的值范围内。

顺便说一句,我可能会通过 Hook 需要修复的函数来处理根本问题,而不是重新编译整个单元。我个人认为这样侵入性更小并且更容易维护。

<小时/>

Why do I get the compiler warning for that one project build only?

一些想法:

  1. 您只有一个包含该单元的项目。
  2. 不同的项目中有不同的编译器选项。也许只有一个项目启用了警告,或者只有一个项目启用了该特定警告。
  3. 您只有一个定义了 WIN32 的项目。
  4. 该文件仅编译一次,但使用多次。也许是因为你正在 build 而不是 build 。

很难解释你问题的这一部分。无论如何,当您问题中的代码在启用警告的情况下编译时,您将收到该警告。您实际上是在比较有符号和无符号。所以你确实需要用我上面提供的方法来抑制警告。

请记住,警告并不意味着您的代码已损坏。抑制该警告不会改变代码的行为。当您看到该警告时,您可以分析代码以检查是否存在问题。在这种情况下,代码可以正常工作,您只需抑制警告即可。

关于delphi - maxint 在哪里定义 - 重复定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13033737/

60 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com