加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何在没有警告的情况下在枚举中定义一个非常大的常量

发布时间:2020-12-15 09:30:36 所属栏目:大数据 来源:网络整理
导读:我正在使用 CMCHTPC MediaFoundation headers,它们似乎有效,但是它们会在几个我想摆脱的点上给出编译器警告.在大多数情况下,罪魁祸首似乎是枚举如下: TMF_Plugin_Type = ( MF_Plugin_Type_MFT = 0,MF_Plugin_Type_MediaSource = 1,MF_Plugin_Type_MFT_Match
我正在使用 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_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个字节.所以无论哪种方式都可行.

更新:我重新检查并确实需要编译器指令(除非您在项目选项中设置类似选项).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读