A header/source split separates what callers need to know from the function body.

declaration and definition Headers commonly hold declarations, while source files hold definitions; this single-file version keeps the helper visible before `main`.

Header Source Boundary

side
header_source_boundary.cpp
Replay: real traced execution (multi-file project)
#include <iostream>

int cubeVolume(int side) {
    return side * side * side;
}

int main() {
    int side = 3;

    int volume = cubeVolume(side);

    std::cout << "side=" << side << std::endl;
    std::cout << "volume=" << volume << std::endl;
    return 0;
}
#include <iostream>

int cubeVolume(int side) {
    return side * side * side;
}

int main() {
    int side = 2;

    int volume = cubeVolume(side);

    std::cout << "side=" << side << std::endl;
    std::cout << "volume=" << volume << std::endl;
    return 0;
}
#include <iostream>

int cubeVolume(int side) {
    return side * side * side;
}

int main() {
    int side = 5;

    int volume = cubeVolume(side);

    std::cout << "side=" << side << std::endl;
    std::cout << "volume=" << volume << std::endl;
    return 0;
}
  1. side ← 3

    7int main() {8    int side→ 3 = 3; //@side=2, 5910    int volume = cubeVolume(side3);
  2. int cubeVolume(int side)

    3int cubeVolume(int side3) {4    return side3 * side * side;5}
  3. volume ← 27

    10    int volume→ 27 = cubeVolume(side3);1112    std::cout << "side=" << side3 << std::endl;13    std::cout << "volume=" << volume27 << std::endl;14    return 0;15}
    outputside=3
    volume=27
  1. side ← 2

    7int main() {8    int side→ 2 = 2;910    int volume = cubeVolume(side2);
  2. int cubeVolume(int side)

    3int cubeVolume(int side2) {4    return side2 * side * side;5}
  3. volume ← 8

    10    int volume→ 8 = cubeVolume(side2);1112    std::cout << "side=" << side2 << std::endl;13    std::cout << "volume=" << volume8 << std::endl;14    return 0;15}
    outputside=2
    volume=8
  1. side ← 5

    7int main() {8    int side→ 5 = 5;910    int volume = cubeVolume(side5);
  2. int cubeVolume(int side)

    3int cubeVolume(int side5) {4    return side5 * side * side;5}
  3. volume ← 125

    10    int volume→ 125 = cubeVolume(side5);1112    std::cout << "side=" << side5 << std::endl;13    std::cout << "volume=" << volume125 << std::endl;14    return 0;15}
    outputside=5
    volume=125