Reputation: 73394
Assuming this example code (source):
#include <stdio.h>
void playgame()
{
printf( "Play game called" );
}
void loadgame()
{
printf( "Load game called" );
}
void playmultiplayer()
{
printf( "Play multiplayer game called" );
}
int main()
{
int input;
printf( "1. Play game\n" );
printf( "2. Load game\n" );
printf( "3. Play multiplayer\n" );
printf( "4. Exit\n" );
printf( "Selection: " );
scanf( "%d", &input );
switch ( input ) {
case 1: /* Note the colon, not a semicolon */
playgame();
break;
case 2:
loadgame();
break;
case 3:
playmultiplayer();
break;
case 4:
printf( "Thanks for playing!\n" );
break;
default:
printf( "Bad input, quitting!\n" );
break;
}
getchar();
return 0;
}
should we use a break;
in the last default
case? If I remove it, I see the same behaviour of the program. However, I saw that other examples also use a break;
in the default
case.
Why? Is there a reason?
Upvotes: 66
Views: 63785
Reputation: 9484
It depends on How default case is written.
In the following case break is neccessary.
switch ( input ) {
default:
printf( "Bad input, quitting!\n" );
break;
case 1: /* Note the colon, not a semicolon */
playgame();
break;
case 2:
loadgame();
break;
}
Upvotes: 11
Reputation: 41036
Should we use a break; in the last default case?
From The C programming language - Second edition (K&R 2):
Chapter 3.4 Switch
As a matter of good form, put a break after the last case (the default here) even though it's logically unnecessary. Some day when another case gets added at the end, this bit of defensive programming will save you.
Upvotes: 124
Reputation: 2497
break
seems to be optional in that case. and also your code will work almost fine.
in many situations adding break improves your code and protect your code from errors/exceptions.
it increases readability, consistency and more error free.
some language like C# break(or other control-flow statement that exits the case) is technically needed after the last alternative. dan04
so for better programming practices i suggest one should use it.
see this excellent post for more details.
Upvotes: 1
Reputation: 6515
if default
case is at last then break
statement have no use. if it is before any other case
then break
is required. since usually we are putting default
at the end so you can omit it..
Upvotes: 3
Reputation: 305
Actually, you don't need the break in default case. And as your checking, it's the same if you don't have break in default case.
But in my opinion, you should have the break in default case, because:
Upvotes: 0
Reputation: 10417
For one thing, you should think about why we should use break
in switch statement. Look at this no-breaking switch statement.
switch ( input ) {
case 1: /* Note the colon, not a semicolon */
playgame();
case 2:
loadgame();
case 3:
playmultiplayer();
case 4:
printf( "Thanks for playing!\n" );
default:
printf( "Bad input, quitting!\n" );
}
Suppose input == 1
. The program will call playgame()
of course, but since there's no break
, program won't finish the switch
but call loadgame()
, playmultiplayer()
, two printf
s sequentially.
To avoid this, we use break
.
case 1:
playgame();
break; /* here */
case 2:
...
Because of break
, the program finishes switch
statement before running codes of case 2
. That's our expected result, isn't it?
Your switch is this:
switch ( input ) {
case 1: /* Note the colon, not a semicolon */
playgame();
break;
case 2:
loadgame();
break;
case 3:
playmultiplayer();
break;
case 4:
printf( "Thanks for playing!\n" );
break;
default:
printf( "Bad input, quitting!\n" );
break;
}
Since there's no case
s after default
, there's no effect whether you write break
on default
or not. However, you can easily suppose to write a new case.
default:
printf( "Thanks for playing!\n" );
/* what happens if there's no `break`...? */
case 5:
the_new_feature();
break;
}
It's common-mistakes in C/C++. If you add new feature after 5 years and you completely forget it, it'll become a very buggy bug. Some modern language (e.g. C#, ...) even forbid switch-case without break
or return
.
Conclusion: There's no problem in syntax, but it's very bad practice and using break
is highly recommended.
Upvotes: 17
Reputation: 3698
There is no difference if you omit or if you leave the break
statement. It is a matter of taste.
However, it is good practice to write the break statement for different reasons.
Take a look at programmers exchange.
Upvotes: 2