bremen_matt
bremen_matt

Reputation: 7339

Design implications of returning a function with void

Consider the following bar functions

#include <iostream>

void foo(){
    std::cout << "Hello" << std::endl;
}
void bar1(){
    return foo();
}
void bar2(){
    foo();
}
void bar3(){
    foo();
    return;
}
int main()
{
    bar1();
    bar2();
    bar3();
    return 1;
}

These functions do exactly the same thing, and actually godbolt produces the same code for all three (as one would hope). The question I have is simply whether there are any software engineering paradigms/guidelines that advocate one form over the other, and if there are any reasons why you would prefer one over the other. They seem to produce the same machine code, but I am imaging that one might be viewed as "easier to maintain", or something like that.

Upvotes: 0

Views: 67

Answers (3)

Matthieu Brucher
Matthieu Brucher

Reputation: 22023

It's quite opinion based, what I can say is that (3) is tagged by clang-tidy rules as part of the readibility-redundant-control-flow.

The idea is that the control flow here is already defined, the return is superfluous and should then be removed.

Upvotes: 1

Dmitry Gordon
Dmitry Gordon

Reputation: 2324

I totally agree with Sombrero Chicken's answer. But I'll also add that the construct like

void bar1(){
    return foo();
}

doesn't make much sense for ordinary functions that return void, but may be useful for template code when you don't know the actual return type, e.g:

template <typename T>
auto SomeTemplateFunction(...)
{
   // do some works
   ...
   return SomeOtherTemplateFunction<T>(...);
}

This will work regardless SomeOtherTemplateFunction<T>'s return type is void or not.

Upvotes: 1

Hatted Rooster
Hatted Rooster

Reputation: 36463

This is quite opinion-based. Though I'd say the general consensus is to write it like bar2(). Don't return explicitly unless you have to return early and don't do return func() if func() returns a void, that just confuses readers because you're not actually returning a value.

Upvotes: 4

Related Questions