main
: Handling Command-Line OptionsIt turns out that main
is a good example of how C++ programs pass arrays to functions. Up to now, we have defined main
with an empty parameter list:
int main() { ... }
However, we sometimes need to pass arguments to main
. The most common use of arguments to main
is to let the user specify a set of options to guide the operation of the program. For example, assuming our main
program is in an executable file named prog
, we might pass options to the program as follows:
Exercise 6.21: Write a function that takes an int
and a pointer to an int
and returns the larger of the int
value or the value to which the pointer points. What type should you use for the pointer?
Exercise 6.22: Write a function to swap two int
pointers.
Exercise 6.23: Write your own versions of each of the print
functions presented in this section. Call each of these functions to print i
and j
defined as follows:
int i = 0, j[2] = {0, 1};
Exercise 6.24: Explain the behavior of the following function. If there are problems in the code, explain what they are and how you might fix them.
void print(const int ia[10])
{
for (size_t i = 0; i != 10; ++i)
cout << ia[i] << endl;
}
prog -d -o ofile data0
Such command-line options are passed to main
in two (optional) parameters:
int main(int argc, char *argv[]) { ... }
The second parameter, argv
, is an array of pointers to C-style character strings. The first parameter, argc
, passes the number of strings in that array. Because the second parameter is an array, we might alternatively define main
as
int main(int argc, char **argv) { ... }
indicating that argv
points to a char*
.
When arguments are passed to main
, the first element in argv
points either to the name of the program or to the empty string. Subsequent elements pass the arguments provided on the command line. The element just past the last pointer is guaranteed to be 0.
Given the previous command line, argc
would be 5, and argv
would hold the following C-style character strings:
argv[0] = "prog"; // or argv[0] might point to an empty string
argv[1] = "-d";
argv[2] = "-o";
argv[3] = "ofile";
argv[4] = "data0";
argv[5] = 0;
When you use the arguments in argv
, remember that the optional arguments begin in argv[1]
; argv[0]
contains the program’s name, not user input.