Рекомендации: как проверить возвращаемое значение NULL в C/С++

Это вопрос стиля для C и С++. Вы предпочитаете

void f() {
  const char * x = g();
  if (x == NULL) {
    //process error
  }
  // continue function
}

или это:

void f() {
  const char * x = g();
  if (! x) {
    //process error
  }
  // continue function
}

? Первый гораздо яснее, но последний менее подробный.

Ответ 1

В основном это зависит от принятой конвенции в вашей группе работ.

Поскольку форма != NULL может быть яснее для разработчика, который к ней используется, обратный также относится к разработчикам, которые использовали для проверки значения NULL с использованием булевой формы.

Как отметил @Andy Prowl, более ясная версия этого появилась в С++ 11 с использованием типа nullptr: if (x == nullptr). Это обозначение должно использоваться как соглашение для всех членов команды, если вы пишете приложение С++ 11.

Наконец, существуют различные шаблоны, которые в значительной степени используются, такие как Null Object Pattern, которые позволяют избежать этой проверки везде в вашем коде, в случай, когда эта проверка включает определенную привычку вашего приложения.