Код, конечно,
может выполнять правильно, то, что написано. Не ясно только зачем вообще объявлять массив, если передача в функцию сравнения нулевого указателя производится со знанием деталей реализации этой функции.
Кошерно было бы так:
const unsigned char vchZero[1] = {};
А без объявления массива так:
return CompareBigEndian(vch, len, ((unsigned char *)0), 0) > 0 &&
CompareBigEndian(vch, len, half ? vchMaxModHalfOrder : vchMaxModOrder, 32) <= 0;
И кошерно и без объявления так:
return CompareBigEndian(vch, len, vch, 0) > 0 &&
CompareBigEndian(vch, len, half ? vchMaxModHalfOrder : vchMaxModOrder, 32) <= 0;
Работает, тесты проходит и ладно
Наверное для единообразия, массивы там и нулевой массив, и там ещё в другом месте есть
static const std::vector vchZero(0);
тоже vchZero -нулевой вектор...
А изменение первоначального варианта до
const unsigned char *vchZero = NULL;
потому что это минимальное число изменений в коде для достижения результата(возможность компиляции под MSVC, с сохранением совместимости с gcc) и первая идея, которая пришла в голову...
Кстати, первоначально
const unsigned char vchZero[0] = {};
появился 24 июля 2014, не так уж и давно
https://github.com/novacoin-project/novacoin/pull/21