Почему помещенный константа перед переменной в сравнении?

18
задан Josh Caswell 28 July 2013 в 20:54
поделиться

7 ответов

Это - механизм для предотвращения ошибок как это:

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, это - вопрос стиля и не влияет на производительность программы.

33
ответ дан 30 November 2019 в 05:58
поделиться

Избегать

if (var = NULL)

ошибка

7
ответ дан 30 November 2019 в 05:58
поделиться

Если Вы по ошибке поместите

if ( var = NULL )

вместо

if ( var == NULL )

затем то только будет предупреждение компилятора. Если Вы инвертируете порядок:

if ( NULL == var )

затем будет ошибка компилятора, если Вы поместите

if ( NULL = var )

Лично, я очень не хочу прочитать код, записанный тот путь, и я только сделал ту ошибку однажды на моем первом году кодирования. =)

11
ответ дан 30 November 2019 в 05:58
поделиться

Заключение в кавычки Joel На программном обеспечении, Партизанское Руководство по Интервьюированию :

Иногда, Вы будете видеть, что программист C пишет что-то как если (0 == strlen (x)), помещая константу на левой стороне ==. Это - действительно хороший знак. Это означает, что они были ужалены однажды слишком много раз путем путания = и == и вынудили себя изучить новую привычку избежать того прерывания.

(я не действительно поклонник этой "лучшей практики".)

5
ответ дан 30 November 2019 в 05:58
поделиться

Заключение: попытка использовать const так, как Вы можете.

const int val = 42;

if (val = 43) {
    ...
}

не скомпилирует.

5
ответ дан 30 November 2019 в 05:58
поделиться

Просто между прочим, я наблюдал за многие годы, уча C новым программистам что, если Вы обучаете себя читать "=", как "добирается" и "==", как равняется, который сам по себе сохранит Вас от большого количества этих ошибок. Затем Вы читаете

if( x = 0){

как, "если x добирается 0 затем", и это начинает звучать странным.

1
ответ дан 30 November 2019 в 05:58
поделиться

Лично, я предпочитаю

if (!x) {

1
ответ дан 30 November 2019 в 05:58
поделиться