3.9. Programs with Multiple Functions¶
When you look at a file that contains several functions, it is tempting to read it from top to bottom, but that is likely to be confusing, because that is not the order of execution of the program.
Note
The order of execution is not necessarily the order in which functions
are defined! For example, the last function that you write might be the
first one that you call in the main
function.
Execution always begins at the first statement of main
, regardless of
where it is in the program** (often it is at the bottom). Statements are
executed one at a time, in order, until you reach a function call.
Function calls are like a detour in the flow of execution. Instead of
going to the next statement, you go to the first line of the called
function, execute all the statements there, and then come back and pick
up again where you left off.
That sounds simple enough, except that you have to remember that one
function can call another. Thus, while we are in the middle of main
, we
might have to go off and execute the statements in three_line
. But while
we are executing three_line
, we get interrupted three times to go off and
execute new_line
.
Fortunately, C++ is adept at keeping track of where it is, so each time
new_line
completes, the program picks up where it left off in three_line
,
and eventually gets back to main
so the program can terminate.
This program calls the multiply_two and add_two functions in the main. See if you can follow the order of execution.
What’s the moral of this sordid tale? When you read a program, don’t read from top to bottom. Instead, follow the flow of execution.
-
Q-2: Match the function to the order it is executed in the program above.
Try again!
- multiply_two
- executes second
- print_total
- executes third
- main
- executes first
- add_two
- executes last
new_line, three_line, main
-
Remember to follow the order of execution, which is not necessarily the order the program is written.
new_line, three_line, new_line, new_line, new_line, main
-
Remember to follow the order of execution, which is not necessarily the order the program is written.
main, three_line, new_line, new_line, new_line
-
Execution begins in the main, then functions are executed as they are called.
main, three_line
-
Note that
new_line
is called inside ofthree_line
.
Q-3: Consider the following C++ code. Note that line numbers are included on the left.
1#include <iostream>
2
3void new_line () {
4 std::cout << '\n';
5}
6
7void three_line () {
8 new_line (); new_line (); new_line ();
9}
10
11int main () {
12 std::cout << "First Line.\n";
13 three_line ();
14 std::cout << "Second Line.\n";
15 return 0;
16}
Which of the following reflects the order in which these functions are executed in C++?
“welcome, yo, hello, goodbye,”
-
take into account
hello
also callsyo
. “welcome, goodbye,”
-
goodbye
calls other functions that print output as well. “welcome, yo, hello, yo, yo, goodbye,”
-
The order of calls and composition of
yo
inhello
and both of those ingoodbye
produce this output. “yo, hello, yo, yo, goodbye,”
-
Note that the
main
also prints something directly.
Q-4: Consider the following C++ code.
1#include <iostream>
2using std::cout;
3
4void yo () {
5 cout << "yo, ";
6}
7
8void hello () {
9 cout << "hello, ";
10 yo(); yo();
11}
12
13void goodbye() {
14 yo(); hello();
15 cout << "goodbye,";
16}
17
18int main () {
19 cout << "welcome, ";
20 goodbye();
21 return 0;
22}
What is printed when the code is executed?
More to Explore
From cppreference.com