C, как известно, является языком довольно низкого уровня, как и HLL. C ++, хотя может показаться, что это язык значительно более высокого уровня, чем C, все же разделяет ряд своих особенностей. И одна из этих черт заключается в том, что языки были разработаны программистами для программистов - и, в частности, программистов, которые знали, что они делают.
[В остальной части этого ответа я собираюсь сосредоточиться на C. Большая часть того, что я скажу, также относится к C ++, хотя, возможно, не так сильно. Хотя, как сказал Бьярн Страуструп, «С позволяет легко выстрелить себе в ногу; С ++ делает это тяжелее, но когда вы делаете это, вырываете ногу целиком». ]
Если вы знаете, что делаете - действительно знаете, что делаете - иногда вам, возможно, придется «нарушать правила». Но большую часть времени большинство из нас согласятся с тем, что благие намерения не дают нам всех проблем, и что бессмысленное нарушение этих правил все время является плохой идеей.
Но в C и C ++ есть удивительно большое количество вещей, которые вы можете сделать, которые являются «плохими идеями», но формально не «против правил». Иногда они плохие идеи иногда (но могут быть оправданы в других случаях); иногда они плохая идея практически все время. Но традиция всегда состояла в том, чтобы не предупреждать об этих вещах - потому что, опять же, предполагается, что программисты знают, что они делают, они не будут делать эти вещи без веской причины, их будет раздражать куча ненужных предупреждений.
Но, конечно, не все программисты действительно знают, что делают. И, в частности, каждый программист C (независимо от его опыта) проходит этап становления программистом на C. И даже опытные программисты на Си могут быть неосторожны и совершать ошибки.
Наконец, опыт показал не только то, что программисты совершают ошибки, но и что эти ошибки могут иметь реальные серьезные последствия. Если вы допустили ошибку, и компилятор не предупредил вас об этом, и каким-то образом программа не сразу аварийно завершает работу или делает что-то явно неправильное из-за этого, ошибка может скрываться там, скрытая, иногда в течение многих лет, пока не приведет действительно большая проблема.
Получается, что в большинстве случаев предупреждения - хорошая идея. Даже опытные программисты узнали (на самом деле, это « особенно опытные программисты узнали»), что в целом предупреждения имеют тенденцию приносить больше пользы, чем вреда. Каждый раз, когда вы умышленно что-то делали неправильно, а предупреждение было неприятным, вероятно, вы, по крайней мере, десять раз делали что-то неправильно, и предупреждение спасало вас от дальнейших неприятностей. И большинство предупреждений можно отключить или обойти для тех немногих случаев, когда вы действительно хотите сделать «не то».
(Классический пример такой «ошибка» является тестом if(a = b)
Большой части времени, это ошибка, поэтому большинство компиляторов этих дней предупредят об этом. -. Некоторые даже по умолчанию Но если вы действительно хотели как правопреемник b
к a
и испытанию В результате вы можете отключить предупреждение, набрав if((a = b))
.)
Второй вопрос: почему вы хотите попросить компилятор рассматривать предупреждения как ошибки? Я бы сказал, что это из-за человеческой природы, в частности, слишком простой реакции: «О, это просто предупреждение, это не так важно, я уберу это позже». Но если вы прокрастинатор (и я не знаю о вас, но я ужасный прокрастинатор), то легко отменить обязательную очистку практически навсегда - и если вы привыкли игнорировать предупреждения, это становится все легче пропустить важное предупреждающее сообщение, которое находится там, незамеченным, среди всех тех, которые вы игнорируете.
Поэтому попросить компилятор рассматривать предупреждения как ошибки - это небольшая хитрость, которую вы можете сыграть на себе, чтобы обойти эту человеческую слабость.
Лично я не так настойчиво отношусь к обработке предупреждений, как к ошибкам. (На самом деле, если честно, я могу сказать, что я практически никогда не включаю эту опцию в своем «личном» программировании.) Но вы можете быть уверены, что у меня эта опция включена на работе, где наше руководство по стилю (которое я писал) обязывает его использовать. И я бы сказал - я подозреваю, что большинство профессиональных программистов скажут - что любой магазин, который не рассматривает предупреждения как ошибки в C, ведет себя безответственно, не придерживается общепринятых лучших отраслевых практик.