Это - механизм для предотвращения ошибок как это:
if ( var = NULL ) {
// ...
}
, Если Вы пишете это с именем переменной на правой стороне, компилятор сможет выгода определенные ошибки:
if ( NULL = var ) { // not legal, won't compile
// ...
}
, Конечно, это не будет работать, если имена переменной появятся с обеих сторон знака "равно", и некоторые люди находят этот стиль непривлекательным.
Редактирование:
Как Evan, упомянутый в комментариях, любой достойный компилятор предупредит Вас об этом при включении предупреждений, например, gcc -Wall
даст Вам следующее:
warning: suggest parentheses around assignment used as truth value
необходимо всегда включать предупреждения на компиляторе, это - самый дешевый способ найти ошибки.
Наконец, как Mike указывает B, это - вопрос стиля и не влияет на производительность программы.
Если Вы по ошибке поместите
if ( var = NULL )
вместо
if ( var == NULL )
затем то только будет предупреждение компилятора. Если Вы инвертируете порядок:
if ( NULL == var )
затем будет ошибка компилятора, если Вы поместите
if ( NULL = var )
Лично, я очень не хочу прочитать код, записанный тот путь, и я только сделал ту ошибку однажды на моем первом году кодирования. =)
Заключение в кавычки Joel На программном обеспечении, Партизанское Руководство по Интервьюированию :
Иногда, Вы будете видеть, что программист C пишет что-то как если (0 == strlen (x)), помещая константу на левой стороне ==. Это - действительно хороший знак. Это означает, что они были ужалены однажды слишком много раз путем путания = и == и вынудили себя изучить новую привычку избежать того прерывания.
(я не действительно поклонник этой "лучшей практики".)
Заключение: попытка использовать const
так, как Вы можете.
const int val = 42;
if (val = 43) {
...
}
не скомпилирует.
Просто между прочим, я наблюдал за многие годы, уча C новым программистам что, если Вы обучаете себя читать "=", как "добирается" и "==", как равняется, который сам по себе сохранит Вас от большого количества этих ошибок. Затем Вы читаете
if( x = 0){
как, "если x добирается 0 затем", и это начинает звучать странным.