我有一个项目组,其中所有 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(“比较有符号和无符号类型”)编译器警告,所有其他项目都在没有警告的情况下构建。
所有项目的使用语句或项目文件中都没有 System.Win.Ctrl。
考虑到 Maxint 可能有两个类型化的常量定义,我想在 Maxint 前面加上“正确”的单位名称,但找不到它的定义。
我搜索了所有可用的 c:\program files (x86)\embarcadero\rad studio\9.0\source*.* 文件,但没有找到任何定义。
System.MaxInt 有效,但不会消除警告。
类型转换 Cardinal(MaxInt) 删除了警告,但我仍然更喜欢“完全合格”的解决方案。
(size_t 定义为 ULONG_PTR 定义为 NativeUInt)
我发现 Quality Central 问题 102873、69836 和 53202,但这些引用重复定义 C++ .h 头文件
我对多个定义的假设是否正确?如果是这样,单位前缀应该/应该是什么?最重要的是:为什么我只得到那个项目构建的编译器警告?