Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      assert

      From cppreference.com
      <c‎ |error
       
       
      Error handling
      Error codes
      Error codes
      Assertions
      assert
      (C11)(removed in C23)
      Bounds checking
       
      Defined in header<assert.h>
      #ifdef NDEBUG

      #define assert(condition) ((void)0)
      #else
      #define assert(condition) /*implementation defined*/

      #endif
      (until C23)
      #ifdef NDEBUG

      #define assert(...) ((void)0)
      #else
      #define assert(...) /*implementation defined*/

      #endif
      (since C23)

      The definition of the macroassert depends on another macro,NDEBUG, which is not defined by the standard library.

      IfNDEBUG is defined as a macro name at the point in the source code where<assert.h> is included, thenassert does nothing.

      IfNDEBUG is not defined, thenassert checks ifits argument(until C23)the expression synthesized from__VA_ARGS__(since C23) (which must have scalar type, otherwise, the behavior is undefined) compares equal to zero. If it does,assert outputs implementation-specific diagnostic information on the standard error output and callsabort(). The diagnostic information is required to include the text ofexpression, as well as the values of thepredefined variable__func__ and of(since C99) thepredefined macros__FILE__ and__LINE__.

      Contents

      [edit]Parameters

      condition - expression of scalar type

      [edit]Return value

      (none)

      [edit]Notes

      There is no standardized interface to add an additional message toassert errors. A portable way to include one is to use acomma operator, or use&& with a string literal:

      assert(("There are five lights",2+2==5));assert(2+2==5&&"There are five lights");

      The implementation ofassert inMicrosoft CRT does not conform to C99 and later revisions, because its underlying function (_wassert) takes neither__func__ nor an equivalent replacement.

      Even though the change ofassert in C23 (N2829) is not a formal defect report, the C committeerecommends implementations to backport the change to old modes.

      [edit]Example

      Run this code
      #include <stdio.h>// uncomment to disable assert()// #define NDEBUG#include <assert.h>#include <math.h> #define TEST(...) __VA_ARGS__ int main(void){double x=-1.0;    assert(x>=0.0);printf("sqrt(x) = %f\n",sqrt(x));     assert(TEST(x>=0.0)); return0;}

      Possible output:

      --- Output with NDEBUG not defined: ---a.out: main.cpp:10: main: Assertion `x >= 0.0' failed. --- Output with NDEBUG defined: ---sqrt(x) = -nan

      [edit]References

      • C23 standard (ISO/IEC 9899:2024):
      • 7.2.2.1 The assert macro (p: 196)
      • C17 standard (ISO/IEC 9899:2018):
      • 7.2.1.1 The assert macro (p: 135)
      • C11 standard (ISO/IEC 9899:2011):
      • 7.2.1.1 The assert macro (p: 186-187)
      • C99 standard (ISO/IEC 9899:1999):
      • 7.2.1.1 The assert macro (p: 169)
      • C89/C90 standard (ISO/IEC 9899:1990):
      • 4.2.1.1 The assert macro

      [edit]See also

      causes abnormal program termination (without cleaning up)
      (function)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=c/error/assert&oldid=173989"

      [8]ページ先頭

      ©2009-2025 Movatter.jp