После дальнейшего расследования:
/ P занимает слишком много времени (я никогда не видел, чтобы за несколько часов он выходил за пределы нескольких файлов, поэтому я отменил эту сборку)
Мне так и не удалось найти четкий способ распечатать текущий уровень предупреждений или какие-либо переопределения, действовавшие в данный момент компиляции. Поэтому на вопрос, который я задал, ответа нет, если только аргумент / P на самом деле не полезен для вас (как я уже говорил, он был непрактичным для моих целей).
Что я смог сделать, так это создать несколько встроенных вызовов в различных заголовках, которые должны генерировать необходимое предупреждение, если уровень предупреждения включал это предупреждение как активное, чтобы проверить, было ли это предупреждение активным или нет:
inline int test (char value) {return ++ value; }
включает "что-то"
inline int test1 (int value) {return test (value); } // должен генерировать C4244 - возможная потеря данных, если предыдущий #include не испортил уровень предупреждения или не переопределил предупреждение 4244.
И так далее ...
В конце концов, я обнаружил, что, в частности, 4244 имеет некоторые странные правила, связанные с ним, и что он фактически «отключен» во всех, кроме / W4 (уровень предупреждения 4) - самый высокий уровень предупреждения. Так как этот уровень предупреждения очень, очень обидчив и жалуется на множество вещей, которые выходят за рамки нашей компетенции, я не хотел включать /W4.
Вместо этого я поместил в наш stdafx.h PCH следующее:
pragma warning (error: 4244) // это полностью включает предупреждения о возможной потере данных из-за неявного преобразования типов при любых обстоятельствах независимо от активного уровня предупреждения
Это сработало.
Итак, MS не оставила несбалансированные переопределения предупреждений ни в одном из своих файлов, которые затронули нас. Просто 4244 очень прощающий, за исключением самого высокого уровня предупреждения, где он становится действительно полезным для нас, в любом случае.
Спасибо за вашу помощь!