Макрос библиотеки C -assert()
Стандартная библиотека C - <assert.h>
Описание
Макрос библиотеки Cvoid assert(int expression)Позволяет записывать диагностическую информацию в файл стандартных ошибок; иными словами, его можно использовать для добавления диагностики в программе на C.
assert()Это макрос в стандартной библиотеке C, определённый в<assert.h>в заголовочном файле. Он используется во время выполнения программы для проверки, истинно ли выражение. Если выражение ложно,assert()Макрос выводит сообщение об ошибке и завершает выполнение программы.
assert() очень полезен для отладки и тестирования.
assert()является мощным инструментом, который помогает разработчикам проверять условия во время выполнения программы и предоставлять подробную информацию об ошибках, когда условия не выполняются.
Объявление
Ниже приведено объявление макроса assert():
#include <assert.h> assert(expression);
Параметр
- expression-- Условное выражение, которое вы хотите проверить; это может быть переменная или любое выражение языка C. Еслиexpressionистинно (TRUE), assert() не выполняет никаких действий. Еслиexpressionложно (FALSE), assert() выводит сообщение об ошибке в стандартный поток ошибок stderr и прерывает выполнение программы.
Если значение expression ложно (0), assert() выводит сообщение об ошибке, содержащее следующую информацию:
- Текстовое представление выражения, вызвавшего сбой утверждения
- имя исходного файла
- номер строки
- имя функции (если доступно)
Затем программа вызывает функцию abort() для завершения выполнения.
Возвращаемое значение
Этот макрос не возвращает никакого значения.
Пример
В следующем примере демонстрируется использование макроса assert().
Пример
Давайте скомпилируем и запустим приведённую выше программу в интерактивном режиме, как показано ниже:
请输入一个整数值: 11 输入的整数是: 11 请输入字符串: example 输入的字符串是: example
Отключение утверждений
В релизных сборках вы можете отключить утверждения для повышения производительности. Это можно сделать, определив NDEBUG:
#define NDEBUG #include <assert.h>
После определения NDEBUG все макросы assert() преобразуются препроцессором в пустой оператор, и проверки не выполняются.
Рекомендации по использованию
- Отладка: на этапе разработки и отладки, использование
assert()Это может помочь вам обнаружить логические ошибки на раннем этапе. - Документация: с помощью
assert()может ясно выражать предположения и ожидания программиста относительно кода, что очень помогает при сопровождении и чтении кода. - Защитное программирование: хотя
assert()Его не следует использовать для обработки предсказуемых ошибок времени выполнения, но оно является эффективным средством обнаружения ошибок программирования.
Примечания
- Производительность: В критичном к производительности коде утверждения могут добавлять дополнительные накладные расходы, поэтому в релизных сборках их обычно отключают.
- Обработка ошибок:
assert()Его не следует использовать для обработки ожидаемых ошибочных ситуаций, а скорее для обнаружения ошибок программиста.