Я всегда предпочитаю второй способ:
if (num == 0)
Поскольку num == 0
или ptr == NULL
оценивается как логическое значение, которое является намерением.Компилятор Java применяет эту форму, а компиляторы C / C ++ - нет.
Худшим примером этого может быть:
if (!strcmp(str, "something"))
, который действительно скрывает свои намерения как семейство strcmp
функций не возвращают логическое значение, они возвращают положительное, нулевое или отрицательное значение (как указано @JoachimPileborg).
Однако, если int
используется для представления логического типа, то C неиметь встроенный тип для, тогда эта форма в порядке:
if (!b)
Но это можно сделать самодокументированием, создав собственный тип:
typedef int bool;
#define true 1
#define false 0
bool b = true;
if (!b)
{
... etc
}