- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个项目组,其中所有 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?
一些想法:
很难解释你问题的这一部分。无论如何,当您问题中的代码在启用警告的情况下编译时,您将收到该警告。您实际上是在比较有符号和无符号。所以你确实需要用我上面提供的方法来抑制警告。
请记住,警告并不意味着您的代码已损坏。抑制该警告不会改变代码的行为。当您看到该警告时,您可以分析代码以检查是否存在问题。在这种情况下,代码可以正常工作,您只需抑制警告即可。
关于delphi - maxint 在哪里定义 - 重复定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13033737/
为什么 sys.maxint < (sys.maxint - 100 + 0.01) 在 Python 中? 最佳答案 这可能是由于非常大的浮点值的精度损失。 (添加 0.01 将右侧转换为 floa
非常不言自明(我在 Windows 上): >>> import sys, numpy >>> a = numpy.int_(sys.maxint) >>> int(a).__class__ >>>
我有一个项目组,其中所有 Win32 程序都具有相同的 ..\PatchLibs 搜索路径。此文件夹包含已修补的 System.Win.Ctrl.pas,其中包含: {$IFDEF WIN32} fu
情况 在处理 coding kata 之后我终于得到了适用于我的小测试用例的算法。 才发现它没有大规模工作,时间不是问题,但数字的大小是问题。 在其中一个测试用例的计算中,我需要执行以下计算。 var
在尝试打印对象的 retainCount 后,我得到 2147483647。为什么会得到这样的结果?应该是 1,不是吗? NSString *myStr = [NSString new]; NSU
我有一些代码可以将一些存储为字符串的时间戳转换为日期时间对象,并且今天注意到当它转换具有大于最大 int 的 int 时间戳值的日期时出现异常。 datetime.datetime.fromtimes
定义最大整数变量时出现错误: overflow in expression; result is 2147483647 with type 'int' [-Winteger-overflow] 代码中
据我所知,十进制和十六进制只是(比方说)int 的表示。 这意味着如果我定义一个整数 x 我应该能够将 x 打印为: 一个小数:printf("%d", x); 十六进制:printf("%x", x
我正在尝试使用 Python 3.7 运行以下代码: import sys print(sys.maxint) 但是我得到一个错误: D:\Python3.7\python.exe "D:/PyCha
我正在使用 Eventlog.Entries (c# .NET 4.0) 读取应用程序事件日志以获取 EventLogEntry 对象并使用它们进行处理。当新事件写入事件日志时,EventLogEnt
我一直在尝试找出如何表示最大整数,并且我已经阅读过使用 "sys.maxint"。但是,在 Python 3 中,当我调用它时,我得到: AttributeError: module 'object'
我在一个 2.5gb 的文件中迭代超过 80m 行,以创建每行开始位置的偏移量列表。内存按预期缓慢增加,直到我达到 40m 行左右,然后在 3-5 秒内迅速增加 1.5gb,然后由于内存不足导致进程退
我对系统架构不是很了解,刚刚开始学习Python。 在一个教程视频中提到,在解释器中运行 sys.maxint 将返回可用的最大整数。 还提到2147483647是对应32位系统的整数。这是我运行 s
我正在尝试从 0 迭代到 sys.maxint 但出现“MemoryError”。我应该怎么做? 这是简单的代码片段。 for i in range(sys.maxint): a = 1 错误:回
在 64 位 Debian Linux 6 上: Python 2.6.6 (r266:84292, Dec 26 2010, 22:31:48) [GCC 4.4.5] on linux2 Type
例如,SQL Server 会警告您还是直接死掉? 最佳答案 当 IDENTITY 列溢出时,SQL Server 2005 将抛出以下错误。 Server: Msg 8115, Level 16,
我是一名优秀的程序员,十分优秀!