×

Assertions in C/C++

Assertions are the statements used to check presumptions which is made by the programmers.

Example: Assertion is used to verify whether the malloc returned by the pointer is NULL or not.

For Example:

assert(i==0);
         i++;
      assert(i==1);

Syntax:

void assert (int expression);

If the above expression returns false than source code, the file number addresses to standard error and a function is called named as abort().

Code:

#include<stdio.h>
       #include<assert.h>
       int main ()
       {
             int x=7; 
             /* few large codes accidentally let us assume x in between changes to 9     
                       */
             x = 9;
// coder assumes the value of x is 7 in remaining code
assert(x==7);
 / * remaining code */
return 0;
}

Output:

Assertion fails at x==7 

Assertion versus Normal Error Handling

Assertions are mostly used to verify rational unfeasible circumstances like they used to verify the location of a code before it started running or after running finishes. It is dissimilar to normal error handling at the time of running assertions usually disables. Therefore, it will be better if we avoid writing assertion statements like this assert () which affects.

For example: If we write assert(x=9) as x changes and we know assertions disables the changes and won’t occurs in it so it will be better if we do not use assertions like this.

Ignoring Assertions

We can eliminate assertions in C/C++ at compilation time by using Pre-processor which is named as NDEBUG.

Code:

// as NDEBUG defines the program runs excellent
           #define NDEBUG
           #include<assert.h>
           int main ()
           {
int x=8; 
                 assert(x==4);
                  return 0;
             }

In Java, assertions are disabled. To enable it, we should pass a sign to run time engine.

Assertion checks are of mainly four types:

1. Precondition Assertion

2. Postcondition Assertion

3. Invariant Assertion

4.Static Assertion

1.Precondition Assertion: The precondition assertion condition satisfies before main body execution.

2.Post_Condition Assertion: The postcondition assertion satisfies after main body execution.

3.Invariant Assertion: This invariant assertion satisfies at function of each after uninteresting region.

4.Static_ Assertion: The static assert is a keyword so while using, we can exclude header and this assert verifies at compilation time instead of running time.

static _assert (condition, diagnostic message)

If the condition is false, it prints diagnostic message.

Example:

static assert (size of(long)==8, “long must be 8 bytes”);
static assert(size of(int) ==4, “int must be 4 bytes”);
       int main ()
       {
            return 0;
        }

Compilation error

\Console app\main.cpp: error: long should be 8 types

This static error should be evaluated at the time of compilation and this static_error can be placed anywhere in the code including global space.

Advantages of static error

  1. At the time of compilation, libraries can detect common errors.
  2. C++ std library implementation detects common error of diagnosis.

Declaration Scopes

Static assert is used in three scopes i.e.

1.Namespace scope

2.Class scope

3.Block scope

1.Namespace scope:

#include<iostream>
static assert (size of(void*) == 8,
      int main ()
      {
            cout << “Assertion passed
it does not produce any error”;
            return 0;
       }

Output:

As assertion is passed it does not produce any errors.

2.Class Scope:

#include<iostream>
using namespace std;
          template <class T, int size>
          class vector {
static assert(size>3,” vector size is too small!”);
                 T m_values[size];
};
int main ()
{
          Vector<int, 4> four;
          Vector<short,2> two;
          return 0;
}

0utput:

 Due to small vector size error occurs and static assertion fails

3.Block Scope

template <TypeName T, int N>
           void f ()
           {
static assert(N>=0, “length of array ais negative.”);
                T a[N];
            }
            int main ()
            {
f < int, -1> ();
                  return 0;
              }

Output:

As length array a is negative static assertion fails error occurs

Uses of Assertions in C program

Assertion can be defined as:

#include<assert.h>
assert(condition);

always the condition should be Boolean.

Example:

int i=0;
     assert(i>=0);

From the above code, we can see that it results true because 0>=0 so at the time of execution, the code normally continues.

If the condition results to a false, the code produces an error and the code execution stops itself.

int i=0;
//false
assert(i>0);

Example of an Assertion using Loop

#include<stdio.h>
       #include<limits.h>
       #include<assert.h>
       int loop function (int a, int b) {
    //precondition assertion (a<=b)
assert(a<=b);
              int result=0;
for (int i=a; i<=b; i++) {
                    //invariant assertion
// always result is positive but sometimes it shows negative as 
                         Result overflow
//at the case of an integer assertion fails
assert(result>=0);
                    result+=i;
 }
//postcondition assertion
//always the result is positive but in the case of 0 it fails
               assert (result>0)
               return result;
}
  int main ();
              int a=3;
              int b=10;
              printf (“loop function on %d and %d gives %d\n”, a, b, loop function
              (a, b));
              int c= INT_MAX -3;
              int d=INT_MAX;
              //the invariant assertion results false in case of c and d because it 
                 Overflows
                 printf (“loop function on %d and %d gives %d\n”, c, d, loop function
                 (c, d));
                return 0;
}

Output:

Loop function upon 3 and 10 results 52 
assert loop: loop function: assertion ‘result>=0’ failed.

The result shows negative at the higher integer values due to overflow and hence invariant assertion fails, and program execution stops, and we can handle by detecting any design flaw in it.


Related Topics

C++ Expressions

C ++ equations are made up of operators, constants and variables arranged according to language rules. It may also include function calls that give results. To calculate the value, the...

4 minutes read.

Include Guards in C++

In C++ programming, we frequently utilize a class more than once, so it is necessary to create a header file and include it in the main program. Now, occasionally a...

3 minutes read.

Diamond Pattern Using Do-While loop in C++

What is Do-While Loop? An iterative loop that checks the condition at the end.The Do-While loop can be used whenever a test condition is specific, as the control enters the loop...

5 minutes read.

Preventing Object Copy in C++

C++ is an object-oriented programming language that provides the ability to create objects, define class and pass objects to functions. When passing an object to a function or returning an...

7 minutes read.

Hello World Program in C++

The steps for “Hello World” C++ program are as follows: Write a C++ code given below in an editor. Save the file with .cpp Compile the code using C++ compiler or using online...

3 minutes read.

C++ Program: Matrix Multiplication

Matrix Multiplication in C++ What is a Matrix? A matrix is a set of numbers in the form of rows and columns forming a rectangular array. It includes numbers, which are often...

4 minutes read.

C++ Multimap

Definition: In C++, a multimap is similar to a map with the additional concept, where multiple elements possess the same keys. It is also not necessary that the key values and...

4 minutes read.

Differences between Local and Global Variable

Define Global Variable Global variables are those that may be accessible worldwide across a programme and are defined outside of any functions or blocks. It may be accessed by any function in...

3 minutes read.

Reverse an Array in C++

The many approaches to reverse an array in the C++ programming language will be discussed in this section. The term "reverse of an array" refers to changing the order of...

8 minutes read.

Hospital Management Project in C++

The following capabilities are required to build a hospital management project: These are as follows: hospitals' names, contact information, and lists of doctors and patients. Activities Supported Hospital Data Print Patients' data to...

4 minutes read.

std::min in C++

std::min in C++ std::min is specified in the program code, used to calculate the lowest amount that has been transferred. When there's more of someone who returns first of them. It's used...

2 minutes read.

C++ Pointer

Pointer is a derived data type that stores the address of a variable. A pointer is used for memory management and dynamic memory allocation. Pointer works on the address of data rather than...

2 minutes read.

Differences between #define & const in C/C++

 Differences between #define & const in C/C++ A preprocessor directive is #define. The preprocessor replaces things defined by #define prior to starting compilation. In this chapter, we'll learn about the member, variable,...

3 minutes read.

Data Hiding in C++

C++ : High-performance apps can be made using the cross-platform language C++. Bjarne Stroustrup created C++ as an addition to the C language. Programmers have extensive control over memory and system...

3 minutes read.

Memset in C++

Memset () is a function in the C++ programming language that fills memory blocks. The value of "ch" is first converted to an unsigned character. In this case, "ch" denotes the...

3 minutes read.

Hashing in C++

Before understanding hashing, we need to know what the use of hashing is. Let us consider an example of a library which consists of many books.Having many books, searching for...

6 minutes read.

Top best IDEs for C/C++ Developers in 2024

Nothing in the current digital world is conceivable without programming. Everything needs programming, from the cell phones in our pockets to self-driving cars. Programming is also necessary for the mouse...

9 minutes read.

Parameterize Constructor

C++ Parameterized Constructor A constructor having parameters is known as parameterize constructor. Parameterize constructor is used to assign different values. Syntax: className(data-type argument){   // Constructor definition   }   className(data-type argument, data-type argument){   // Constructor definition   } A parameterized constructor can be passed values to constructor function in two ways: 1)...

1 minute read.

Print Table Using While Loop in C++

Multiplication Table In mathematics, a table is created by multiplying a certain number by all of the counting numbers, i.e., 1, 2, 3, 4, 5, 6, and so on. It is...

4 minutes read.

C++ Call by Value

In this article, we will discuss C++ Call by Value with their syntax, examples, use cases, advantages, and disadvantages. C++ Function A function is a set of statements that executes a task....

5 minutes read.