Эта библиотека использует assert()
, как будто это функция идентификации в режиме выпуска (когда определено NDEBUG). Проблема в том, что какой-то важный код обернут в assert()
, и мои тесты сработали при выполнении в режиме выпуска, потому что эти важные части не были вызваны. Пример этого можно найти здесь , где генератор случайных байтов ничего не сгенерирует и вызовет бесконечный цикл.
Личный анекдот: мне не нравится assert()
, и я лично не пользуюсь им из-за этих проблем двусмысленности. Я слышал о многих проектах, которые имели серьезные ошибки из-за этого, совсем недавно EOS, когда их модульные тесты не обнаружили некоторые массивы вне диапазона, потому что NDEBUG был определен в режиме выпуска, и он не срабатывал. Документация, кажется, не ясна по этому вопросу. assert()
действует как личность вообще?
Эта библиотека (libbtc), кажется, широко используется, и я не понимаю, почему разработчик сделал это. Это ужасная ошибка, и я должен раскошелиться и удалить все эти утверждения? Или это какая-то вещь C, которая не совместима с C ++? Может кто-нибудь объяснить, пожалуйста, правильный курс действий здесь?
Я использую Clang 6.