Мистерия: if (something==NULL) или if (NULL==something)?

Нека разгледаме следния програмен отрязък:

[code lang=”C”]if (NULL == someApiPointer)
{
//do something here
};[/code]

Защо сравняваме NULL със стойността на someApiPointer, а не обратното – както сани учили в училище и както изглежда по-логично?
Когато за първи път срещнах подобна конструкция си помислих, че има нещо специално в нея – прави се от гледна точка на сигурността или пък е нов стил на писане?

Отговорът на този въпрос е интересен: NULL/TRUE/FALSE се слагат от лявата страна, защото много програмисти бъркат оператора за присвояване (=)с оператора за равенство (==)

Ако в следния код изпуснете единия знак за равенство ще присвоите на променливата someApiPointer стойност NULL:
[code lang=”C”]if (someApiPointer = NULL)
{
//do something here
};[/code]

Ако обаче обърнете израза и направите същата грешка -Компилаторът ще Ви се скара:
[code lang=”C”]if (NULL = someApiPointer)
{
//do something here
};[/code]
Причината: опитвате се да присвоите стойност на константа

Доста елементарен трик, но определено действа 😀
Твърди се, че съвременните компилатори издават най-малкото warning, когато в if конструкция използвате знак за присвояване. Във Visual Studio 2008/C++ проект Компилаторът мълчи 🙂

Източник: http://www.codeproject.com/Messages/3105644/Re-If-null-equalsequals-something-or-if-something-.aspx

Leave a Reply

Your email address will not be published. Required fields are marked *

*