#pragma warning disable 在数组初始值设定项中被忽略
#pragma warning disable ignored inside array initializer
我试图创建一个小定义来解决 this bug in QITABENT
,我注意到 #pragma warning (disable: ...)
语句的特殊行为。
在下面的代码中,定义 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
被 not 抑制。
static const QITAB qit[] =
{
#pragma warning( push )
#pragma warning( disable: 4838 )
QITABENT(MediaPlayerCallback, IMFPMediaPlayerCallback)
#pragma warning( pop )
//{ 0 },
};
编译器如何以不抑制警告的方式解释这段代码?
这可能与 QITABENT
的定义完全解析时有关。
(请注意,我对让上面的代码正常工作并不感兴趣,我只是很好奇编译器如何解释它)
附录:
关于近距离投票和澄清:我与给出 shotgun/link-only 答案的人进行了讨论,大概只读了一半的问题(因为问题解释了如何在 a 中使用 #pragma
宏,这不是我要问的)现在答案被(自我)删除了,我因不清楚而获得了密切的投票。那么让我重申一下我对这个问题的意图:
- 这个问题不是要找一个
define
来抑制这个警告
这个问题不是关于如何在 VC++ 中一般地抑制警告
这道题是想了解最后一个代码示例中的三行抑制代码会发生什么。为什么它们在那个确切位置(在数组初始化中)没有效果,但在数组初始化之外却有效果?这可能归结为回答如何以及何时解析 pragma 语句和 macross。
初始化列表以右大括号 }
结束,这是生成警告的地方。
试试这个:
static const QITAB qit[] =
{
QITABENT(Derived, Base)
#pragma warning( push )
#pragma warning( disable: 4365 )
}
#pragma warning( pop )
;
[编辑]
根据下面 Mr.C64
的评论,更正了 QITABENT(Derived, Base)
.
中的参数顺序
我试图创建一个小定义来解决 this bug in QITABENT
,我注意到 #pragma warning (disable: ...)
语句的特殊行为。
在下面的代码中,定义 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
被 not 抑制。
static const QITAB qit[] =
{
#pragma warning( push )
#pragma warning( disable: 4838 )
QITABENT(MediaPlayerCallback, IMFPMediaPlayerCallback)
#pragma warning( pop )
//{ 0 },
};
编译器如何以不抑制警告的方式解释这段代码?
这可能与 QITABENT
的定义完全解析时有关。
(请注意,我对让上面的代码正常工作并不感兴趣,我只是很好奇编译器如何解释它)
附录:
关于近距离投票和澄清:我与给出 shotgun/link-only 答案的人进行了讨论,大概只读了一半的问题(因为问题解释了如何在 a 中使用 #pragma
宏,这不是我要问的)现在答案被(自我)删除了,我因不清楚而获得了密切的投票。那么让我重申一下我对这个问题的意图:
- 这个问题不是要找一个
define
来抑制这个警告 这个问题不是关于如何在 VC++ 中一般地抑制警告
这道题是想了解最后一个代码示例中的三行抑制代码会发生什么。为什么它们在那个确切位置(在数组初始化中)没有效果,但在数组初始化之外却有效果?这可能归结为回答如何以及何时解析 pragma 语句和 macross。
初始化列表以右大括号 }
结束,这是生成警告的地方。
试试这个:
static const QITAB qit[] =
{
QITABENT(Derived, Base)
#pragma warning( push )
#pragma warning( disable: 4365 )
}
#pragma warning( pop )
;
[编辑]
根据下面 Mr.C64
的评论,更正了 QITABENT(Derived, Base)
.