我试图创建一个小的定义来解决此错误QITABENT
,我注意到该#pragma warning (disable: ...)
语句的特殊行为。
在以下代码中,define QITABENT
生成警告C4838
static const QITAB qit[] = { QITABENT(MediaPlayerCallback, IMFPMediaPlayerCallback) };
我可以轻松地抑制此警告,这可以起作用:
#pragma warning( push ) #pragma warning( disable: 4838 ) static const QITAB qit[] = { QITABENT(MediaPlayerCallback, IMFPMediaPlayerCallback) //{ 0 }, }; return QISearch(this, qit, riid, ppv); #pragma warning( pop )
现在,我想做一个定义QITABENTEX
,该定义可以自动抑制由生成的警告QITABENT
。但似乎不可能的,因为当我写了下面的代码警告C4838
是不是抑制。
static const QITAB qit[] = { #pragma warning( push ) #pragma warning( disable: 4838 ) QITABENT(MediaPlayerCallback, IMFPMediaPlayerCallback) #pragma warning( pop ) //{ 0 }, };
编译器如何以不抑制警告的方式解释此代码?
QITABENT
完全解决的定义时,可能必须这样做。
(请注意,我对使上述代码正常工作并不真正感兴趣,我只是很好奇编译器对其解释的方式)
附录:
关于近距离投票和澄清:我与某人进行了讨论,给出了shot弹枪/仅链接的答案,大概只是半途阅读了该问题(因为该问题说明了如何#pragma
在宏中使用而不是我要的内容)现在,该答案((自己)已删除),我因不清楚而获得了密切投票。因此,让我重申我对这个问题的意图:
这个问题不是关于寻找一个define
抑制此警告的问题
这个问题不是关于一般如何在VC ++中抑制警告的问题
这个问题是关于尝试理解最后一个代码示例中的三行抑制代码会发生什么。为什么它们在那个确切的位置(在数组初始化中)没有作用,但是在数组初始化之外却有作用?这可能归结为回答如何以及何时解析pragma语句和宏。
Vlad Feinste.. 5
初始化列表以大括号结尾}
,这是生成警告的地方。
尝试这个:
static const QITAB qit[] = { QITABENT(Derived, Base) #pragma warning( push ) #pragma warning( disable: 4365 ) } #pragma warning( pop ) ;
Per Mr.C64
在下面的评论中,更正了参数的顺序QITABENT(Derived, Base)
。
初始化列表以大括号结尾}
,这是生成警告的地方。
尝试这个:
static const QITAB qit[] = { QITABENT(Derived, Base) #pragma warning( push ) #pragma warning( disable: 4365 ) } #pragma warning( pop ) ;
Per Mr.C64
在下面的评论中,更正了参数的顺序QITABENT(Derived, Base)
。