#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 生成的警告。但这似乎是不可能的,因为当我编写以下代码时,警告 C4838not 抑制。

    static const QITAB qit[] = 
    {
#pragma warning( push )
#pragma warning( disable: 4838 )
        QITABENT(MediaPlayerCallback, IMFPMediaPlayerCallback)
#pragma warning( pop )
        //{ 0 },
    };

编译器如何以不抑制警告的方式解释这段代码?

这可能与 QITABENT 的定义完全解析时有关。

(请注意,我对让上面的代码正常工作并不感兴趣,我只是很好奇编译器如何解释它)

附录:

关于近距离投票和澄清:我与给出 shotgun/link-only 答案的人进行了讨论,大概只读了一半的问题(因为问题解释了如何在 a 中使用 #pragma宏,这不是我要问的)现在答案被(自我)删除了,我因不清楚而获得了密切的投票。那么让我重申一下我对这个问题的意图:

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

试试这个:

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

[编辑] 根据下面 Mr.C64 的评论,更正了 QITABENT(Derived, Base).

中的参数顺序