Нека разгледаме следния програмен отрязък:
[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