В Java существуют jsr 305 и jsr 308, которые стандартизировали поддержку указания программистом в каких местах возможно, а в каких невозможны null значения. Компания JetBrains пошла немного дальше и добавила ещё Contract аннотацию, которая позволяет указывать взаимосвязи между входными и выходными параметрами функции. Intellij IDEA имеет очень эффективный статический анализатор, который позволяет на этапе разработки отлавливать большое количество проблем, связанных с разыменовыванием null указателя.
Реализовать эту идею можно при помощи пустых #define макросов:
Описание
В Java существуют jsr 305 и jsr 308, которые стандартизировали поддержку указания программистом в каких местах возможно, а в каких невозможны
null
значения. Компания JetBrains пошла немного дальше и добавила ещё Contract аннотацию, которая позволяет указывать взаимосвязи между входными и выходными параметрами функции. Intellij IDEA имеет очень эффективный статический анализатор, который позволяет на этапе разработки отлавливать большое количество проблем, связанных с разыменовываниемnull
указателя.Реализовать эту идею можно при помощи пустых
#define
макросов:Примеры
null
значения из функции, которая должна вернуть__NotNull
:null
, но клиентский код не проверяет возвращаемое значение:null
то функция должна вернуть новый объект:Имеющиеся решения
clang
предлагает свои__nullable
и__nonnull
аннотации