Lendo argumentos de comando de linha

Tal como os outros comandos Linux, como o cp (copy) etc., também os programas escritos em C++ aceitam argumentos de linha de comandos.  Suponha que o seguinte programa era compilado e que o ficheiro executável (linguagem máquina) correspondente se chama testa-argumentos.

#include <iostream>
#include <string>

using namespace std;

int main(int numero_de_argumentos, char const* argumentos[])
{
    if(numero_de_argumentos <= 0)
        cout << "Estranho!  Não deveria acontecer!" << endl;
    else {
        cout << "O nome do programa é: " << argumentos[0] << '.' << endl;

        for(int i = 1; i != numero_de_argumentos; ++i)
            cout << "O argumento " << i << " é " << argumentos[i] << '.'
                 << endl;

        string ultimo_argumento = argumentos[numero_de_argumentos - 1];
        cout << "O último argumento aos pedacinhos é:" << endl;
        for(string::size_type i = 0; i != ultimo_argumento.size(); ++i)
            cout << ultimo_argumento[i] << endl;
    }
}

A execução do programa resultaria em (a negrito as entradas do utilizador, e a itálico o pronto do computador):

a?????@mercurio ~...?????> ./testa-argumentos
O nome do programa é: ./testa-argumentos.
O último argumento aos pedacinhos é:
t
e
s
t
a
-
a
r
g
u
m
e
n
t
o
s
a?????@mercurio ~...?????> ./testa-argumentos 1 dois 34
O nome do programa é: ./testa-argumentos.
O argumento 1 é 1.
O argumento 2 é dois.
O argumento 3 é 34.
O último argumento aos pedacinhos é:
3
4

Nota: quando executar o programa em modo de depuração pode passar argumentos de linha de comando após o comando r:

(gdb) r 1 dois 34