Предупреждение
Сообщение компилятора о месте в коде, которое написано правильно, но выглядит подозрительно. Сборку предупреждение не останавливает: программа всё равно получается.
Ошибка значит, что компилятор не может перевести код, и программа не появится. Предупреждение значит другое: код переводится, но компилятор подозревает, что ты имел в виду не то, что написал. Например, переменная получила значение, а потом ни разу не используется: скорее всего, про переменную забыли.
В выводе сборки предупреждение отличает слово warning вместо error. Код предупреждения у C4189, а у предупреждений стандартной библиотеки Visual Studio — с букв STL, например STL4038.
Сколько предупреждений показывать, задаёт /W1 (только самые важные) до /W4 (почти всё).
В нашем проекте включён /W4: чем раньше компилятор заметит подозрительное место, тем меньше времени уйдёт на поиск ошибки, когда программа поведёт себя странно.
Предупреждение видно, только пока файл компилируется. Если файл не менялся, сборщик берёт готовый .obj, компилятор не запускается, и предупреждения в выводе нет, хотя подозрительное место осталось в коде.