你能否为特定位置包含的任何标题关闭(特定)编译器警告?

时间:2010-07-17 17:50:07

标签: c++ visual-studio visual-studio-2008

我有一个第三方库,即使在/ W3下也会产生大量警告。有没有办法让我告诉编译器,“为此目录或其子目录中包含的任何文件禁用C4244”?当然,我不想在我们自己的代码库中禁用警告,也不想跟踪每个可能的包含并用#pragma warning(...

包装它。

5 个答案:

答案 0 :(得分:9)

我不想在这里回答我自己的问题,但我担心在这种情况下“正确”的答案是:这是不可能的。

答案 1 :(得分:5)

您可以在/wd4600中放置VS Project Settings > Command-line Options等标志,告诉编译器禁止特定Complier Warnings

答案 2 :(得分:4)

我不确定你是否意味着你不想用#pragma指令包装你的include语句,或者不想花时间追踪正确的指令。如果是后者,那么这就是我过去所做的:

#ifdef _MSC_VER
#pragma warning( disable : 4244 )
#endif

#include "MyHeader.h"

#ifdef _MSC_VER
#pragma warning( default : 4244 ) /* Reset to default state */
#endif

答案 3 :(得分:3)

您可以尝试从包含路径中删除第三方项目。然后创建一个与第三方项目具有相同目录结构和头文件的子目录,以便所有#includes现在找到你的标题。然后在每个假标题xxxx.h中设置pragma然后包含真正的xxxx.h标头,然后清除pragma。为避免递归地包含相同的文件,您必须在#include中添加额外的目录。

就个人而言,我只是通过你的项目并添加编译指示。

答案 4 :(得分:2)

尝试:

//in wrapper_3rdParty.h
#pragma once

#pragma warning(push)
#pragma warning(disable : 4244)

#include "3rdParty.h"

#pragma warning(pop)

然后在您的代码中,只需#include "wrapper_3rdParty.h"

处理警告default行为的问题,并且使用htat包的所有内容都会禁止警告。