dcsimg
Login | Register   
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX

By submitting your information, you agree that devx.com may send you DevX offers via email, phone and text message, as well as email offers about other products and services that DevX believes may be of interest to you. DevX will process your information in accordance with the Quinstreet Privacy Policy.


Tip of the Day
Language: C++
Expertise: All
Feb 8, 2000

WEBINAR:

On-Demand

Application Security Testing: An Integral Part of DevOps


The "Single Exit Point" Idiom — Is It Still Relevant?

Many programming schools recommend that functions have only a single exit point. For example, the following function is considered bad programming practice because it contains three potential exit points:

 
  int comapre_strings(const string & s1, const string & s2)
  { 
    // lexicographical comparison; like strcmp()
    if (s1 == s2) return 0;
    if (s1 > s2) return 1;
    return -1;
  }

Although the "single exit" programming idiom has some merits in procedural languages, it's virtually useless in C++. To see why, look at the following function. Ostensibly, it complies with the single exit idiom:

 
int func()
{
  char * pbuff = new char [MAX_SIZE]; // #1
  std::string str ("hello"); // #2
  return 0; // only one exit?
}

In practice, func() has three exit points; one of which is an explicit return statement. The other two are implicit exit points: in the statement #1, if operator new fails, it will throw a std::bad_alloc exception. Throwing an exception is an exit point. Similarly, in statement #2, if string's constructor fails, it will also throw an exception. Thus, the single exit point design idiom is pretty irrelevant in non-trivial C++ code. Instead of blindly following obsolete principles, programmers should focus on robust, efficient and functional design.

Danny Kalev
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
×
We have made updates to our Privacy Policy to reflect the implementation of the General Data Protection Regulation.
Thanks for your registration, follow us on our social networks to keep up-to-date