This article is about the computer programming concept. Programmers can use assertions to help specify programs and to reason about program correctness. For example, a precondition—an assertion placed at the beginning of a section of code—determines assertion and reason pdf set of states under which the programmer expects the code to execute.
A postcondition—placed at the end—describes the expected state at the end of execution. The example above uses the notation for including assertions used by C. That notation cannot be used in existing mainstream programming languages. The braces included in the comment help distinguish this use of a comment from other uses. Libraries may provide assertion features as well. If an assertion evaluates to false at runtime, an assertion failure results, which typically causes execution to abort.
The use of assertions helps the programmer design, develop, and reason about a program. C and Java, use them only to check assumptions at runtime. This prevents the code from getting out of sync with the assertions. An assertion may be used to verify that an assumption made by the programmer during the implementation of the program remains valid when the program is executed. A major advantage of this technique is that when an error does occur it is detected immediately and directly, rather than later through its often obscure side-effects.
Since an assertion failure usually reports the code location, one can often pin-point the error without further debugging. Assertions are also sometimes placed at points the execution is not supposed to reach. In Java, assertions have been a part of the language since version 1. The danger of assertions is that they may cause side effects either by changing memory data or by changing thread timing.
Assertions should be implemented carefully so they cause no side effects on program code. During the development cycle, the programmer will typically run the program with assertions enabled. When an assertion failure occurs, the programmer is immediately notified of the problem. When a program is deployed to production, assertions are typically turned off, to avoid any overhead or side effects they may have. In other cases, such as Java, assertions are present in the deployed code, and can be turned on in the field for debugging. Assertions may also be used to promise the compiler that a given edge condition is not actually reachable, thereby permitting certain optimizations that would not otherwise be possible.
In this case, disabling the assertions could actually reduce performance. Assertions that are checked at compile time are called static assertions. 11 support static assertions directly through static_assert. Both of these methods require a method of constructing unique names. Modern compilers support a __COUNTER__ preprocessor define that facilitates the construction of unique names, by returning monotonically increasing numbers for each compilation unit.