devxlogo

Make sure your switch statements always have a default label

A safe-to-use, long-lasting switch statement should always contain a default label in order to avoid hard-to-detect bugs such as the following:

 //Month.h fileenum Month { Jan, 		Feb,		Mar,		//...etc.		Dec};//Month.cpp fileint daysInMonth(Month month) {		int result = 0;		switch (month) {			case Jan:				result = 31;			break;			case Feb:				result = 28;			break;			//...Mar to Nov go here			case Dec:				result = 31;			break;			//no default		} //end switch	return result;	}//end daysInMonth() 

Now suppose some other programmer needs to extend the Month enumeration later in the following manner:

 //file Month.h re-edited	enum Month { Jan, 			Feb,			LeapFeb, //newly added 			Mar,			//...etc.			Dec};

As a result, the switch statement above will return the wrong result; for example, 0, to its user’s amazement when its month is LeapFeb. Had a default label been used, this bug could have been detected easily:

 		switch (month) { //now with a default		case Jan:			result = 31;		break;		case Feb:			result = 28;		break;		//...Mar to Nov go here		case Dec:			result = 31;		break;		deafult:			cout<<"unsupported month value;check this switch!";		break;	} //end switch

Charlie has over a decade of experience in website administration and technology management. As the site admin, he oversees all technical aspects of running a high-traffic online platform, ensuring optimal performance, security, and user experience.

See also  Five Early Architecture Decisions That Quietly Get Expensive

About Our Editorial Process

At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

See our full editorial policy.