×

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

Hexadecimal to Decimal in C++

In computers, hexadecimal numbers are represented with base 16 and decimal numbers are represented with base 10 and values 0-9, whereas hexadecimal numbers have digits ranging from 0 to 15,...

3 minutes read.

C++ if-else

C++ if else Control Statement if else control statement in C++ is used to control the program flow in a two-way direction. When condition returns a true value, then the program executes if condition block otherwise...

1 minute read.

C++ vardiac() function

In the C++ programming language, the flexibility feature is provided by the variadic function. To understand more about flexibility, let's see the following syntax. Syntax: If we have to add two numbers,...

3 minutes read.

C++ Call by Reference

Call by Reference is a C++ method for passing arguments to a function that enables us to pass the actual memory address of the parameter rather than a copy of...

4 minutes read.

C++ Try-Catch

Every useful program will eventually encounter unexpected outcomes. By entering data that are incorrect, users might create mistakes. Sometimes the program's creator didn't consider all of the options or was...

7 minutes read.

Implementing the sets without C++ STL containers

Many practical features and tools in C++ support us in programming competitions. One of these parts is a set from the Standard Template Library (STL), which offers an effective way...

6 minutes read.

Swap numbers in C++

Swap numbers Swapping refers to interchanging values between two variables. Swapping is important and easy to understand programming logic in the world of coding. Though it is used in the programming...

4 minutes read.

Roadmap to C++ Programming

Introduction There are so many programming languages available in the market, but among them, C++ is something that never lost its charm. It has a powerful impact on the programming world....

4 minutes read.

The Stock Span Problem

It is necessary to determine the span of a stock's price throughout all n days in order to solve the stock span problem, which involves a set of n daily...

5 minutes read.

Quick Sort in C++

Quick sort is an efficient, in-place, comparison-based sorting algorithm that uses a divide-and-conquer strategy to sort an array or list of elements. First a pivot element is selected from the...

4 minutes read.

How the value is passed in C++

Introduction: The call-by-value method of giving arguments to a function duplicates the real value of an argument into the formal parameter of the function. In this instance, modifications to the parameter...

5 minutes read.

SET Data Structure in C++

Generally, in our home, we store food items in a fridge or kitchen efficiently to find them easily and use them. Similarly, in programming, we need to store the data...

6 minutes read.

Binary Search in C++

The binary search in the C++ programming language will be discussed. By continually halves the array and then seeking specified items from a half array; binary search is a technique...

8 minutes read.

std::distance() in C++

The primary function of std::distance is to facilitate the total number of elements if we have two iterators. It is defined inside the header files. It has both magnitude and...

2 minutes read.

Types of polymorphism in C++

What is polymorphism in C++ ? Polymorphism literally translates to "multiple forms". This indicates that the same thing behaves differently depending on the context in programming. Polymorphism is a feature of C++...

6 minutes read.

Continue in C++ While loop

Continue statement: Inside the loop, the continue statement is used to control the loop. C++ utilizes the continue keyword to implement the continue statement, which transfers the program's flow at the...

4 minutes read.

Fast Input and Output in C++

In competitive programming, it's critical to read input as quickly as possible in order to save time. "Warning: Big I / O data, be aware of certain languages (but most...

3 minutes read.

C++ Inheritance

What do you mean by Inheritance ? The ability to define new classes based on existing classes in order to reuse and organise code is referred to as inheritance. Single inheritance...

7 minutes read.

How is multiset implemented in C++

Similar to sets, multisets are an associative container type where several items may share the same values. Associative containers implement instantly searchable sorted data structures with O(log n) complexity. In a multiset,...

5 minutes read.

getline() Function and Character Array in C++

In this article, we will explore about some concepts on getline() function and character array in the most useful language C++. The getline() method in C++ is simply a standard library...

6 minutes read.