Макрос библиотеки 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().

Пример

#include <assert.h> #include <stdio.h> int main() { int a; char str[50]; printf("Введите целое число:"); scanf("%d", &a); assert(a >= 10); printf("Введённое целое число: %d\n", a); printf("Введите строку:"); scanf("%s", str); assert(str != NULL); printf("Введённая строка: %s\n", str); return(0); }

Давайте скомпилируем и запустим приведённую выше программу в интерактивном режиме, как показано ниже:

请输入一个整数值: 11
输入的整数是: 11
请输入字符串: example 
输入的字符串是: example 

Отключение утверждений

В релизных сборках вы можете отключить утверждения для повышения производительности. Это можно сделать, определив NDEBUG:

#define NDEBUG
#include <assert.h>

После определения NDEBUG все макросы assert() преобразуются препроцессором в пустой оператор, и проверки не выполняются.

Рекомендации по использованию

  • Отладка: на этапе разработки и отладки, использованиеassert()Это может помочь вам обнаружить логические ошибки на раннем этапе.
  • Документация: с помощьюassert()может ясно выражать предположения и ожидания программиста относительно кода, что очень помогает при сопровождении и чтении кода.
  • Защитное программирование: хотяassert()Его не следует использовать для обработки предсказуемых ошибок времени выполнения, но оно является эффективным средством обнаружения ошибок программирования.

Примечания

  • Производительность: В критичном к производительности коде утверждения могут добавлять дополнительные накладные расходы, поэтому в релизных сборках их обычно отключают.
  • Обработка ошибок:assert()Его не следует использовать для обработки ожидаемых ошибочных ситуаций, а скорее для обнаружения ошибок программиста.

Стандартная библиотека C - <assert.h>

Другие расширения