Difference between void and non-void functions in C++

Learn difference between void and non-void functions in c++ with practical examples, diagrams, and best practices. Covers c++, function, memory development techniques with visual explanations.

Understanding Void vs. Non-Void Functions in C++

Illustration depicting a function with an arrow pointing out (non-void) and another with no arrow (void), symbolizing return values.

Explore the fundamental differences between void and non-void functions in C++, including their return types, usage, and impact on program flow and memory.

In C++, functions are essential building blocks that encapsulate specific tasks. A crucial aspect of defining a function is specifying its return type. This return type dictates whether the function will produce a value that can be used by the calling code or if it will simply perform an action without yielding a result. This article delves into the distinctions between void and non-void functions, providing clear examples and best practices.

What is a Void Function?

A void function, as its name suggests, does not return any value to the calling function. Its primary purpose is to perform a set of operations, such as printing output, modifying global variables, or interacting with hardware, without needing to communicate a result back. When a function is declared with void as its return type, it cannot be used in an expression where a value is expected.

#include <iostream>

// A void function that prints a message
void greetUser(std::string name) {
    std::cout << "Hello, " << name << "!\n";
}

int main() {
    greetUser("Alice"); // Call the void function
    // int result = greetUser("Bob"); // ERROR: void function cannot return a value
    return 0;
}

Example of a void function in C++

flowchart TD
    A[Start Program] --> B{Call greetUser("Alice")}
    B --> C[greetUser function executes]
    C --> D[Print "Hello, Alice!"]
    D --> E[greetUser finishes]
    E --> F[Return to main]
    F --> G[End Program]

Execution flow of a void function

What is a Non-Void Function?

Conversely, a non-void function is designed to compute and return a specific value to the caller. The return type can be any valid C++ data type, such as int, float, double, char, bool, or even custom types like objects or pointers. The return statement is used within the function body to send the computed value back. This returned value can then be stored in a variable, used in an expression, or passed as an argument to another function.

#include <iostream>

// A non-void function that returns an integer sum
int add(int a, int b) {
    return a + b;
}

// A non-void function that returns a boolean
bool isEven(int number) {
    return (number % 2 == 0);
}

int main() {
    int sum = add(5, 3); // Call and store the returned value
    std::cout << "Sum: " << sum << "\n"; // Output: Sum: 8

    if (isEven(sum)) {
        std::cout << sum << " is an even number.\n";
    } else {
        std::cout << sum << " is an odd number.\n";
    }
    return 0;
}

Examples of non-void functions returning int and bool

flowchart TD
    A[Start Program] --> B{Call add(5, 3)}
    B --> C[add function executes]
    C --> D[Calculate 5 + 3]
    D --> E[Return 8]
    E --> F[Store 8 in 'sum' variable]
    F --> G{Call isEven(sum)}
    G --> H[isEven function executes]
    H --> I[Check if 8 % 2 == 0]
    I --> J[Return true]
    J --> K[Evaluate if (true)]
    K --> L[Print "8 is an even number."]
    L --> M[End Program]

Execution flow of non-void functions

Key Differences and Use Cases

The choice between a void and a non-void function depends entirely on the function's purpose. If a function's job is to produce a result that needs to be processed further, it should be non-void. If its job is to perform an action or side effect without needing to communicate a specific outcome, void is appropriate. Understanding this distinction is crucial for writing clean, modular, and efficient C++ code.

Table comparing void and non-void functions based on return value, purpose, and usage.

Comparison of Void vs. Non-Void Functions