VC6使用#pragma warning的一点经验

    技术2022-05-11  54

    1.       VC6.0中定义类CXMLError的头文件中起始处有如下#include语句

    #include <comdef.h>

    #include <string>

     

    class CXMLError 

    {

           

    在使用Level 4编译时,报告C4100C4511C4512C4663C4245C4018几种Warning

     

    2.       修改为如下:

    #pragma warning( push )

    #pragma warning( disable :  4100 4511 4512 4663 4245 4018)

    #include <comdef.h>

    #include <string>

    #pragma warning( pop )

     

    这时产生了大量C4514警告。

     

    3.       再修改为

    #pragma warning( push )

    #pragma warning( disable :  4100 4511 4512 4663 4245 4018 4514)

    #include <comdef.h>

    #include <string>

    #pragma warning( pop )

     

    结果依然如上,有大量C4514警告,少量466342454108

     

    4.       再修改如下:

    #pragma warning( disable :  4100 4511 4512 4663 4245 4018 4514)

    #pragma warning( push )

    #include <comdef.h>

    #include <string>

    #pragma warning( pop )

    结果只余下4663, 4245, 4108

     

    由于不能去除4663, 4245, 4108三种警告

     

    5.       又对包含头文件修改为在Level 3编译,如下:

    #pragma warning( disable:4514)

    #pragma warning( push,3 )

    #include <comdef.h>

    #include <string>

    #pragma warning( pop)

     

    结果无警告产生。

     

    6.       又尝试如下修改:

    #include <comdef.h>

    #pragma warning( push,3 )

    #include <string>

    #pragma warning( pop)

     

    结果无警告产生。

     

    小结:

    1.         在防止包含头文件引起的Warning而使用#pragma warning时,应只针对产生警告的头文件进行处理,在这个问题中是<string>,这时应该在#include <string>上面加#pragma warning(push),否则可能增加其它警告,如此处产生的大量C4514

    2.         在使用#pragma warning(push)后使用#pragma warning(disable: xxxx)可能无效时,可以尝试交换两个语句的顺序,这可能是VC6.0中的#pragma warningBug

    3. VC6.0中存在一些不能diable掉的Warning,如4663, 4245, 4108等。这可能是VC6.0Bug,如已知的C4786VC6.0中不能disable掉,使用#pragma warning(disable : 4786)之后仍然会显示警告。


    最新回复(0)