(MSVC 2017 / WALL & / WX) Включая Iostream выдает 800 предупреждений - PullRequest
0 голосов
/ 12 января 2019

Обзор материалов для оптимизированного курса C ++ в следующем квартале. Преподаватель этого курса применяет / WALL и / WX для свойств нашего проекта. У меня проблема в том, что включение библиотеки Iostream выдает более 800 предупреждений. Вот код, который я пытаюсь запустить:

#include "pch.h"
#include <iostream>

int main() {
  std::cout << "Hello World";
  return(0);
}

Несколько предупреждений, которые я получаю, включают:

C4514 'abs': unreferenced inline function has been removed
C4774 'sprintf_s': format string in argument 3 is not a string literal
C4820 'std::basic_ios ...': '7' bytes of padding added after...

Перед тем, как спросить Стека, я отправил Профу письмо по электронной почте, чтобы спросить о предупреждениях, и мне сказали:

Вы должны включить iostream

Если вы получили 100 предупреждений, вы включили заголовок, который не нужен

Есть ли что-то, что я пропускаю? Я знаю, что не смогу редактировать исходные файлы для iostream, поскольку это не переносимое кодирование. Я оглянулся, чтобы посмотреть, смогу ли я явно включить такие функции, как cout, cin и т. Д. Однако я не чувствую, что это правильное решение.

Edit:

Пользователь запросил более четкое предупреждающее сообщение на случай, если там что-то отсутствует. Вот некоторые из них:

C415 'abs': referenced inline function has been removed (Project: Hello World) (File: stdlib.h)
C4710 'int sprintf_s(char *const....: function not inlined. (Project: Hello World) (File: stdio.h)

Профессор использует GCC через Visual Studio, и наши настройки извлекаются из репозитория как готовые проекты.

1 Ответ

0 голосов
/ 12 января 2019

Ваш профессор, совершенно просто, не прав.

Это не имеет ничего общего с "включением заголовка, который не нужен" (зачем это генерирует предупреждения?), Но с использованием /WALL, , который обнаруживает некоторые недостатки в реализации stdlib !

Этот переключатель не рекомендуется; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ”[1018 *» »," ”," *1011* "

/Wall включает много предупреждений, которые, хотя иногда и полезны, но в большинстве случаев бесполезны. /Wall в Visual C ++ не означает то же самое, что -Wall на g ++ (на самом деле, g ++ "имеет /Wall неправильно", поскольку фактически он не разрешает все предупреждения). В любом случае, в Visual C ++ все важные и полезные предупреждения включаются /W4.

Я бы использовал /W4 в Visual Studio (и -Wall -Wextra в GCC).

Очевидно, я не могу помочь вам убедить вашего профессора в этом, кроме как предложить что-то сказать в духе "Я спросил о переполнении стека и обнаружил, что это из-за слишком строгого /Wall и генерировать предупреждения на собственных заголовках Visual Studio. Они предлагают вместо этого использовать /W4. Как вы думаете? "

Это правда, что вам нужно #include <iostream>, и это правда, что вы никогда не должны изменять предоставленные стандартные заголовки. Кроме того, не забудьте передать поток '\n' для завершения строки вывода!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...