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

In C++ switch statement, the expression of each case label must be an integer constant expression.

For example, the following program fails in compilation.

/* 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.

#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 error. In C, using a integer literal does not cause error.

Program to find the largest number between two numbers using switch case:

#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

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up


Improved By : SantanuBasak

Article Tags :
Practice Tags :



1


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.