Open In App

Data type of case labels of switch statement in C++?

Improve
Improve
Like Article
Like
Save
Share
Report

In C++ switch statement, the expression of each case label must be an integer constant expression. 
For example, the following program fails in compilation. 
 

CPP




/* Using non-const in case label */
#include<stdio.h>
int main()
{
  int i = 10;
  int c = 10;
  switch(c)
  {
    case i: // not a "const int" expression
         printf("Value of c = %d", c);
         break;
    /*Some more cases */
                    
  }
  return 0;
}


Putting const before i makes the above program work.
 

CPP




#include<stdio.h>
int main()
{
  const int i = 10;
  int c = 10;
  switch(c)
  {
    case i:  // Works fine
         printf("Value of c = %d", c);
         break;
    /*Some more cases */
                    
  }
  return 0;
}


Note : The above fact is only for C++. In C, both programs produce an error. In C, using an integer literal does not cause an error.
Program to find the largest number between two numbers using switch case:
 

C




#include<stdio.h>
int main()
{
  int n1=10,n2=11;
 
  // n1 > n2 (10 > 11) is false so using 
  // logical operator '>', n1 > n2 produces 0
  // (0 means false, 1 means true) So, case 0
  // is executed as 10 > 11 is false. Here we
  // have used type cast to convert boolean to int,
  // to avoid warning.
 
  switch((int)(n1 > n2))
  {
    case 0: 
         printf("%d is the largest\n", n2);
         break;
    default:
         printf("%d is the largest\n", n1);
  }
 
  // n1 < n2 (10 < 11) is true so using logical
  // operator '<', n1 < n2 produces 1 (1 means true,
  // 0 means false) So, default is executed as we
  // don't have case 1 to be executed.
 
  switch((int)(n1 < n2))
  {
    case 0: 
         printf("%d is the largest\n", n1);
         break;
    default:
         printf("%d is the largest\n", n2);
  }
 
  return 0;
}
//This code is contributed by Santanu


 



Last Updated : 12 Aug, 2021
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads