The “Single Exit Point” Idiom &#151 Is It Still Relevant?

The “Single Exit Point” Idiom &#151 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.


Share the Post: