Почну з цього: послідовність є королем, рішення є менш важливим, ніж послідовність у вашій кодовій базі.
В C ++
NULL визначається як 0 або 0L в C ++.
Якщо ви читали мову програмування на C ++, Bjarne Stroustrup пропонує 0
явно використовувати, щоб уникнути NULL
макросу під час виконання завдань , я не впевнений, чи зробив він це з порівняннями, минув час, коли я читав книгу, я думаю, що він щойно зробив if(some_ptr)
без явного порівняння, але я на цьому нечіткий.
Причиною цього є те, що NULL
макрос є оманливим (як майже всі макроси), він насправді 0
буквальний, а не унікальний тип, як випливає з назви. Уникнення макросів - одне із загальних рекомендацій на C ++. З іншого боку, він 0
виглядає як ціле число, і це не в порівнянні з покажчиками або присвоєним їм. Особисто я можу піти в будь-який спосіб, але, як правило, я пропускаю явне порівняння (хоча деякі люди не люблять це, мабуть, тому у вас є учасник, який пропонує зміни в будь-якому випадку).
Незалежно від особистих почуттів, це здебільшого вибір найменшого зла, оскільки немає одного правильного методу.
Це зрозуміло і є загальною ідіомою, і я вважаю за краще, немає шансів випадково призначити значення під час порівняння, і воно чітко читає:
if(some_ptr){;}
Це зрозуміло, якщо ви знаєте, що some_ptr
це тип вказівника, але це може також виглядати як ціле порівняння:
if(some_ptr != 0){;}
Це зрозуміло, в звичайних випадках це має сенс ... Але це протікаюча абстракція, NULL
насправді 0
буквальна і може в кінцевому підсумку легко зловживати:
if(some_ptr != NULL){;}
У C ++ 0x є nullptr, який зараз є кращим методом, оскільки він є явним і точним, просто будьте уважні щодо випадкового призначення:
if(some_ptr != nullptr){;}
Поки ви не зможете перейти на C ++ 0x, я б стверджував, що марно витрачати час на те, який із цих методів ви використовуєте, їх усіх недостатньо, тому nullptr був винайдений (поряд із проблемами загального програмування, які придумали ідеальну переадресацію .) Найголовніше - підтримувати послідовність.
В С
С - інший звір.
У C NULL можна визначити як 0 або як ((void *) 0), C99 дозволяє реалізувати визначені нульові константи покажчика. Таким чином, це фактично зводиться до визначення NULL реалізації, і вам доведеться перевірити його у вашій стандартній бібліотеці.
Макроси дуже поширені, і взагалі їх дуже часто використовують для усунення недоліків у підтримці загального програмування в мові та інших речах. Мова набагато простіша, і посилання на попередній процесор частіше.
З цього погляду я, мабуть, рекомендував би використовувати NULL
визначення макросу в C.