Можете ли вы отключить (специфические) предупреждения компилятора для любого заголовка, включенного из определенного места?

У меня есть сторонняя библиотека, которая генерирует массу предупреждений, даже в /W 3. Есть ли способ сообщить компилятору "отключить C4244 для любого файла, включенного в этот каталог или его подкаталогов"? Конечно, я не хочу отключать предупреждение в нашей собственной базе кода, и я не хочу отслеживать все возможные включения и обернуть его с помощью #pragma warning(...

Ответы

Ответ 1

Ненавижу отвечать на свой вопрос здесь, но я боюсь, что "правильный" ответ в этом случае: это невозможно.

Ответ 2

Вы можете помещать флаги, например /wd4600 в VS Project Settings > Command-line Options, чтобы сообщить компилятору подавить специальные Предупреждения об ошибках

Ответ 3

Я не уверен, подразумевали ли вы, что вы не хотите, чтобы ваши заявления include включались в директивы #pragma или не хотели тратить время на отслеживание правильной директивы. Если это последнее, то это то, что я делал в прошлом:

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

#include "MyHeader.h"

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

Ответ 4

Вы можете попробовать удалить сторонний проект из своего пути include. Затем создайте sub-dir, который имеет ту же структуру dir и файлы заголовков, что и сторонний проект, так что все #includes теперь найдут ваши заголовки. Затем в каждом поддельном заголовке xxxx.h вы устанавливаете прагму, а затем включаете настоящий заголовок xxxx.h, затем очищаете прагму. Чтобы избежать рекурсивного включения одного и того же файла, вам нужно добавить дополнительный каталог в #include.

Лично я просто просматриваю ваш проект и добавляю прагму.

Ответ 5

Try:

//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 имеют предупреждение, подавленное.