我正在使用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常量表达式违反了子范围
有没有办法解决这个定义而没有在编译器中明确地抑制那个警告? (注意{$R-}
不起作用;这会在运行时关闭范围检查,但不会在编译时关闭。)
答案 0 :(得分:8)
你可以将它声明为-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);
没有编译器指令也可以工作。文档说:
要为值赋值,请使用= constantExpression跟随其标识符,其中constantExpression是一个求值为整数的常量表达式。
值-1的整数在内部表示为4个字节。所以无论哪种方式都应该有效。
更新:我重新检查了,确实需要编译器指令(除非你在项目选项中设置了类似的选项)。
答案 1 :(得分:0)
据我所知,你有两个选择。
DWORD
演员阵容,并将DWORD(-1)
替换为-1
,如Uwe的回答中所述。{$WARN BOUNDS_ERROR OFF}
。选项1的缺点是你必须找到所有这样的声明并进行更改。这意味着对第三方库进行批量更改。如果您希望接受该库的新版本,则必须重新应用这些更改。对于某些图书馆来说,这可能会有问题。
所以在我看来,抑制警告可能是更清洁的方法。您可以将抑制指令放在包含文件中,或放在单元的头部。这意味着您对第三方代码所做的更改范围较窄。
答案 2 :(得分:-2)
我认为您可以看到In [1]: import pandas as pd
In [2]: import numpy as np
In [3]: a=pd.Series([1,np.nan])
In [4]: b=pd.DataFrame(["a","b"])
In [5]: b["1"]=np.where(
a.isnull(),
np.nan,
"Hello"
)
In [6]: b
Out[6]:
0 1
0 a Hello
1 b nan
In [7]: b[1].isnull()
Out[7]:
0 False
1 False
Name: 1, dtype: bool
中TColor
和TColorRec
的宣传方式,并使用Embarcadero的经验宣布:
System.UITypes