В языке C ++ появились операторы утверждений, чтобы помочь программистам проверять условия или утверждения, которые могут быть логически неверными. Сегодня в этой статье о C ++ мы будем использовать оператор assert в наших примерах, чтобы проиллюстрировать его работу по выдаче ошибок в случае возникновения какой-либо логической проблемы. Если вам нужна помощь в отладке таких операторов, вам повезло, что у вас есть эта статья. Давайте начнем нашу новую статью о C ++ с открытия консольного приложения оболочки системы Ubuntu 20.04 с помощью сочетания клавиш «Ctrl + Alt + T».
Вы будете создавать новый файл C ++ в своем терминале. Это необходимо сделать с помощью запроса «touch» внутри оболочки. Таким образом, запрос, используемый для этой цели, был отображен на изображении ниже.
Теперь файл помещен в домашний файловый менеджер системы Linux. Мы должны открыть этот файл C ++ в одном из установленных редакторов, то есть в vim, text или nano. Итак, для этой цели мы выбрали редактор GNU Nano. Команда для открытия этого нового файла показана ниже.
Пример 1
Начнем с самого первого примера использования оператора assert в коде C ++ для проверки логики некоторых операторов кода. Мы начали код с заголовочных файлов. Добавление заголовка потока ввода-вывода необходимо, когда вы работаете на платформе C ++. Стандартное пространство имен является обязательным в C ++ с ключевыми словами using и Std в нем, как вы также можете видеть на изображении. Для пользователя «assert» нам нужно добавить файл заголовка assert, чтобы он работал. Таким образом, мы добавили заголовочный файл «Assert.h» с ключевым словом «#include». Для выполнения запущен метод main ().
Мы инициализировали целочисленную переменную с именем «val» значением 13. В следующей строке подряд переменная «val» была переопределена другим значением 15. После этого был использован оператор assert для проверки того, является ли переменная » val «имеет значение 13. Поскольку это логически неверно и переменная» val «была переопределена значением 15, это вызовет исключение. Сохраним код после завершения функции main () с помощью «Ctrl + S». После сохранения нам нужно вернуться в терминал для компиляции и выполнения с помощью «Ctrl + X».
Для компиляции кода C ++ вам понадобится какой-нибудь компилятор, настроенный в вашей системе Ubuntu 20.04. Таким образом, мы использовали инструкцию компиляции g ++ в оболочке для компиляции файла assert.cc. Компиляция ничего не возвращает взамен, что дает нам понять, что код во всем синтаксически корректен. Давайте просто выполним файл с нашей постоянной командой «./a.out» в консоли. Запуск файла возвращает ошибку, поскольку оператор assert возвращает false. Результат представлен на прикрепленном изображении.
Если вы хотите избежать вывода заявленной ошибки оператором assert, вам необходимо определить флаг No Debug в вашем коде C ++. Для этого вы должны использовать ключевое слово «определить» со знаком решетки и «NDEBUG» в качестве флага в области заголовка. Таким образом, мы открыли тот же файл и добавили пространство имен после заголовочного файла «io». После стандартного пространства имен мы определили флаг «NDEBUG» в заголовке и использовали заголовок «assert.h» после него. Убедитесь, что не изменили последовательность заголовков, показанную ниже. Внутри функции main () мы добавили оператор cout для вывода, что отключение assert было успешным.
Давайте скомпилируем и снова запустим этот обновленный код в оболочке. После этого мы не получили ошибок на этот раз, используя «NDEBUG» в нашей области заголовка.
Пример 2
Давайте рассмотрим новый пример использования оператора assert в коде C ++. Но на этот раз мы будем использовать оператор assert в некоторой пользовательской функции. Таким образом, мы добавили файлы заголовков и стандартное пространство имен в начале кода в последовательности. Был объявлен определяемый пользователем метод с именем «show ()», принимающий в качестве параметра значение указателя целочисленного типа.
В функции show () мы использовали оператор assert, чтобы проверить, не является ли указатель, переданный в параметре, NULL. Если он нулевой, будет выдана ошибка. Оператор cout затем отобразит значение переменной, на которую указывает указатель «v». В основной функции мы инициализировали целочисленную переменную «val» значением 13. Два указателя «a» и «b» были инициализированы в NULL. Адрес переменной «val» был привязан к указателю «a». Функция show () была вызвана с указателем «a» и «b» отдельно для вывода разных результатов. Второй вызов функции show должен вызвать исключение, потому что он принимает указатель NULL, а оператор assert возвращает false в ответ. Сохраним и запустим код.
После запуска этого фрагмента кода мы получили тот же результат, который мы обсуждали выше. Он показывает результат 13 для первого вызова функции, т.е. Переданный указатель «a», в то время как вызов другой функции показывает ошибку.
Чтобы исправить эту ошибку, вам просто нужно связать указатель «b» с переменной «val». Таким образом, мы сделали то же самое в показанном ниже коде. Мы заменили переменную val на v1 и добавили другую переменную v2. Переменная v1 была связана с указателем «a», а v2 была связана с указателем «b». Общий сценарий остается таким же, как показано.
После отладки и запуска кода ошибок пока не обнаружено. Оба значения переменных v1 и v2 были успешно отображены, как показано ниже.
Пример 3
Давайте закончим последним, но не последним примером утверждения утверждения в коде C ++. Код содержит два оператора assert и два оператора cout. Первый оператор assert проверяет, дает ли умножение тот же результат. Поскольку условие является логически правильным, оно должно возвращать истину, и никаких ошибок отображаться не будет. Оператор cout будет выполнен, показывая, что первый оператор был правильным. Другой оператор assert снова проверяет, возвращает ли умножение с обеих сторон одинаковый результат. Поскольку вывод не будет таким же, он будет логически неверным. Следовательно, он вернет false. Из-за этого возникнет ошибка, и оператор cout после этого не будет выполняться.
Из-за логической ошибки программа автоматически завершается после выполнения первого cout.
Чтобы решить эту проблему, мы будем использовать в коде флаг «NDEBUG», как мы это делали до сих пор.
На этот раз ошибок не было, и выполняются оба оператора cout.
Вывод
Статья посвящена использованию оператора assert в C ++. Мы изо всех сил старались продемонстрировать его работу с помощью функции main () и пользовательской функции. Мы также обсудили способ отключения утверждения в C ++, то есть флаг NDEBUG.