Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi maxint定义在哪里-重复定义?_Delphi_Delphi Xe2 - Fatal编程技术网

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

Delphi maxint定义在哪里-重复定义?,delphi,delphi-xe2,Delphi,Delphi Xe2,我有一个项目组,其中所有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

我有一个项目组,其中所有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(“比较有符号和无符号类型”)编译器警告,所有其他项目生成时没有警告。
所有项目的uses语句或项目文件中都没有System.Win.Ctrl

考虑到Maxint可能有两个类型化常量定义,我想在Maxint前面加上“正确”的单元名,但找不到它的定义。
我搜索了所有可用的c:\program files(x86)\embarcadero\rad studio\9.0\source**文件,但没有找到任何定义。
System.MaxInt可以工作,但不能消除警告。
Typecasting Cardinal(MaxInt)删除了警告,但我仍然喜欢“完全限定”解决方案。
(尺寸定义为ULONG(尺寸定义为NativeUInt)
我发现了质量问题102873, 69836和53202,但这些引用是重复定义C++ +h头文件< /p> 我对不止一个定义的假设正确吗?如果是,单位前缀应该是什么?
最重要的是:为什么只针对一个项目生成得到编译器警告?

MaxInt在系统单元中声明。我很确定这是这里范围内唯一的MaxInt。你看到的警告是准确的。MaxInt是有符号的,size\u t是无符号的。您应该取消显示警告。例如,您可以将MaxInt强制转换为大小\u t:

if size > size_t(MaxInt) then
这很好,因为MaxInt在size\u t的值范围内

顺便说一句,我可能会通过挂接需要修复的函数来解决根本问题,而不是重新编译整个单元。我个人认为这是一种侵入性较小且易于维护的方法


为什么我会得到编译器警告呢 仅项目构建

一些想法:

  • 您只有一个包含该单元的项目
  • 在不同的项目中有不同的编译器选项。可能只有一个项目启用了警告,或者只有一个项目启用了该特定警告
  • 您只有一个定义了WIN32的项目
  • 此文件只编译一次,但使用多次。也许是因为你正在建造一个更大的建筑
  • 很难解释你问题的那一部分。不管怎样,当问题中的代码在编译时启用了警告,您将得到该警告。您确实在比较有符号和无符号。因此,您确实需要使用我上面提供的方法来抑制警告


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

    MaxInt在系统单元中声明。我很确定这是这里范围内唯一的MaxInt。你看到的警告是准确的。MaxInt是有符号的,size\u t是无符号的。您应该取消显示警告。例如,您可以将MaxInt强制转换为大小\u t:

    if size > size_t(MaxInt) then
    
    这很好,因为MaxInt在size\u t的值范围内

    顺便说一句,我可能会通过挂接需要修复的函数来解决根本问题,而不是重新编译整个单元。我个人认为这是一种侵入性较小且易于维护的方法


    为什么我会得到编译器警告呢 仅项目构建

    一些想法:

  • 您只有一个包含该单元的项目
  • 在不同的项目中有不同的编译器选项。可能只有一个项目启用了警告,或者只有一个项目启用了该特定警告
  • 您只有一个定义了WIN32的项目
  • 此文件只编译一次,但使用多次。也许是因为你正在建造一个更大的建筑
  • 很难解释你问题的那一部分。不管怎样,当问题中的代码在编译时启用了警告,您将得到该警告。您确实在比较有符号和无符号。因此,您确实需要使用我上面提供的方法来抑制警告


    请记住,警告并不意味着您的代码已被破坏。抑制该警告不会改变代码的行为。当您看到该警告时,您将分析代码以检查是否存在问题。在这种情况下,代码运行良好,您只需要抑制警告。

    我应该更加强调真正让我困惑的问题:为什么我只在一个项目构建中得到编译器警告?“。我已相应地编辑了我的原始帖子。有什么想法吗?很难说。可能是不同的编译器选项。也可能是有条件的。该代码仅为32位windows版本编译。但要意识到这一警告是意料之中的。很容易看出,代码确实在比较有符号值和无符号值。我想我回答了你问的问题。你在这里寻找更多吗?我想不出有什么我没有提到的。有人只为一个程序打开了编译器设置“警告-比较有符号和无符号类型”。[我认为“off”是XE2的默认值]。我应该更加强调一个真正让我困惑的问题:为什么我只在一个项目构建中得到编译器警告?“。我已相应地编辑了我的原始帖子。有什么想法吗?很难说。可能是不同的编译器选项。也可能是有条件的。该代码仅为32位windows版本编译。但要意识到这一警告是意料之中的。很容易看出,代码确实在比较有符号值和无符号值。我想我回答了问题t