В чем разница между if (CONST == переменная) и if (переменная == CONST)? - PullRequest
11 голосов
/ 26 октября 2009

Есть ли разница в порядке оператора сравнения?

#define CONST_VALUE 5

int variable;

...

if ( variable == CONST_VALUE )   // Method 1
...

OR

if ( CONST_VALUE == variable )   // Method 2
...

Это просто вопрос предпочтения или есть веская причина для определенного порядка сравнения?

Ответы [ 5 ]

31 голосов
/ 26 октября 2009

Причина, по которой некоторые люди используют метод 2, заключается в том, что вы получите ошибку компилятора, если наберете a = вместо ==.

Тем не менее, у вас будут люди (такие как я), которые все еще будут использовать метод 1, потому что они находят его более читабельным, и в случае ошибки он будет обнаружен во время тестирования (или, в некоторых случаях, статического анализа код).

10 голосов
/ 26 октября 2009

Единственное отличие состоит в том, что (CONST_VALUE == переменная) делает общую опечатку (CONST_VALUE = переменная) невозможной для компиляции.

Для сравнения, если (variable = CONST_VALUE) приведет к тому, что компилятор подумает, что вы хотели назначить CONST_VALUE для 'variable'.

Путаница = / == - довольно распространенный источник ошибок в C, поэтому люди пытаются обойти проблему с соглашениями по кодированию.

Конечно, это не спасет вас, если вы сравниваете две переменные.

И вопрос, кажется, дубликат Как проверить на равенство? (0 == i) или (i == 0)

А вот еще немного информации: http://cwe.mitre.org/data/definitions/481.html

3 голосов
/ 26 октября 2009

Как уже упоминалось, переменная CONST_VALUE == позволяет избежать опечатки =.

Я все еще делаю "variable == CONST_VALUE", потому что я думаю, что это более читабельно и когда я вижу что-то вроде:

if(false == somevariable)

мое кровяное давление повышается.

2 голосов
/ 26 октября 2009

Первый вариант

if (variable == CONST_VALUE) 

лучше, потому что это более читабельно. Из соглашения (также используемого в математике) следует, что значение, которое изменяется больше всего, стоит на первом месте.

Второй вариант

if (CONST_VALUE == variable)

используется некоторыми людьми для предотвращения смешивания проверки на равенство с заданием

if (CONST_VALUE = variable)

Существуют более эффективные способы достижения этого, например, включение и учет предупреждений компилятора.

1 голос
/ 26 октября 2009

Другие уже указали причину. = / == Путаница. Я предпочитаю первую версию, потому что она более близко следует за процессом мышления. Некоторые компиляторы облегчают путаницу с = и ==, давая предупреждение, когда он сталкивается с чем-то вроде

if(a=b)

в этом случае, если вы действительно хотите выполнить задание, вы должны написать

if((a=b)) 

который я бы тогда написал как

if( (a=b) != 0) 

, чтобы избежать путаницы.

Это говорит о том, что в нашем случае с кодом 1 мы имели путаницу = / ==, и написание ее наоборот не помогло бы, поскольку это было сравнение между переменными.

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