当前位置:  开发笔记 > 编程语言 > 正文

#pragma警告禁用数组初始化程序中的忽略

如何解决《#pragma警告禁用数组初始化程序中的忽略》经验,为你挑选了1个好方法。

我试图创建一个小的定义来解决此错误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)



1> Vlad Feinste..:

初始化列表以大括号结尾},这是生成警告的地方。

尝试这个:

static const QITAB qit[] =
{
    QITABENT(Derived, Base)
#pragma warning( push )
#pragma warning( disable: 4365 )
}
#pragma warning( pop )
;

Per Mr.C64在下面的评论中,更正了参数的顺序QITABENT(Derived, Base)

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有