SchoolInt

Jan 18, 2011 23:37

Навеяно ошибкой новичка в Си:

if (counter =! 0 ) ...Код компилируется и запускается, но делает не то: не проверяет неравенство с нулем, а присваивает "не ноль" (правильно: "!=").
Из подобных ошибок:
if (counter = 0 ) ...этот код также компилируется, но не проверяет на равенство, а присваивает ноль (правильно: "==").
Саму возможность подобных ошибок ( Read more... )

fun, rsdn, c++

Leave a comment

Comments 5

rezdm January 18 2011, 14:54:58 UTC
Вопрос решается привычкой писать
if(0 == counter)
..

Я привык -- так и на яве так и пишу if(null == some_object)

Reply

enerjazzer January 18 2011, 15:08:40 UTC
не решается:

int x, y;
if (x=y) ...

Это только с константами пройдет, а в общем случае - нет.
Так что лично я не вижу смысла уродовать код неестественным порядком сравнения.
Нас всё же обычно интересует, равно ли нечто нулю, а не равен ли нуль чему-нибудь еще ;)

Reply

rezdm January 18 2011, 15:32:44 UTC
Ну от части проблем, от части.

Кстати, про 0. Я видел и такое вот сравнение
int c;
...
c = 0;
if(!!c)
{
...

Много вобщем всякого, много. Разного.

Reply


rezdm January 18 2011, 14:58:45 UTC
Ну и вспоминается всякое типа
#define i j

или
#define while if

Reply


a_liq January 19 2011, 20:38:25 UTC
На if (counter = 0 ) любой нормальный компиллятор даёт warning.

Reply


Leave a comment

Up