gpt4 book ai didi

delphi - 如何在枚举中定义一个非常大的常量而不发出警告?

转载 作者:行者123 更新时间:2023-12-03 14:59:53 25 4
gpt4 key购买 nike

我正在与 CMCHTPC MediaFoundation headers 合作,它们似乎可以工作,但它们在几个我想摆脱的点上给出了编译器警告。在大多数情况下,罪魁祸首似乎是以下枚举:

TMF_Plugin_Type = (
MF_Plugin_Type_MFT = 0,
MF_Plugin_Type_MediaSource = 1,
MF_Plugin_Type_MFT_MatchOutputType = 2,
MF_Plugin_Type_Other = DWORD(-1)
);

无论最后一个值如何定义,为 DWORD(-1)DWORD($FFFFFFFF) 或简单地为 $FFFFFFFF ,编译器总是回复:

W1012 Constant expression violates subrange bounds

是否有任何方法可以修复此定义,而无需在编译器中专门抑制该警告? (请注意,{$R-} 不起作用;这会在运行时关闭范围检查,但不会在编译时关闭。)

最佳答案

您可以将其声明为 -1 并给出 {$Z4} 来告诉编译器为此枚举使用 4 个字节:

{$Z4}
type
TMF_Plugin_Type = (
MF_Plugin_Type_MFT = 0,
MF_Plugin_Type_MediaSource = 1,
MF_Plugin_Type_MFT_MatchOutputType = 2,
MF_Plugin_Type_Other = -1);

它也可以在没有编译器指令的情况下工作。文档说:

To assign an ordinality to a value, follow its identifier with = constantExpression, where constantExpression is a constant expression that evaluates to an integer.

值为 -1 的整数在内部表示为 4 个字节。所以无论哪种方式都应该有效。

更新:我重新检查了一下,编译器指令确实是必要的(除非您在项目选项中设置了类似的选项)。

关于delphi - 如何在枚举中定义一个非常大的常量而不发出警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34752227/

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