[C con Clase] Duda

Steven Davidson srd4121 en njit.edu
Sab Dic 10 00:13:27 CET 2011


Hola Óscar,

2011/12/9 Oscar <pelucheloko en hotmail.com>:
> Imaginaba algo así, pero, al ver un swap antes del main, y uno después de
> él, no me queda claro qué swap entra en juego ¿por qué el que está después

Creo que te refieres a esto:

void swap( int *x, int *y );

Esto es un prototipo, es como una declaración pero para una función.
Por lo tanto, aquí no estamos invocando o llamando a esta función,
simplemente le decimos al compilador que 'swap' es una función de este
tipo: no retorna nada y acepta dos punteros como parámetros.

> de main? ¿es por que c++ hace una ejecución secuencial línea a línea?
> (supongo que esta pregunta es muy novata :-))
>

Ciertamente, C++ sigue secuencialmente lo que hay escrito en un
fichero fuente. Sin embargo, el programa no realiza todos los pasos
que aparecen, ya que el programa comienza desde la función 'main()'
ejecutando sus líneas. En el caso de este programa, se ejecuta
secuencialmente:

1)    int x = 5, y = 10;

Definimos dos variables de tipo entero y las inicializamos.

2)    std::cout << "Main. Before swap, x: " << x
                << " y: " << y << "\n";

Mostramos un mensaje en la pantalla

3)    swap(&x, &y);

Invocamos a 'swap()' con dos parámetros, así que nos saltamos a la
función 'swap()' según su definición:

3.1)  int *px = &x;
3.2)  int *py = &y;

Copiamos los parámetros a sus respectivos parámetros locales a esta función

3.3)    int temp;

Definimos una variable

3.4)    std::cout << "Swap. Before swap, *px: " << *px
                  << " *py: " << *py << "\n";

Mostramos un mensaje en la pantalla

3.5)    temp = *px;
3.6)    *px = *py;
3.7)    *py = temp;

Realizamos diversas asignaciones

3.8)    std::cout << "Swap. After swap, *px: " << *px
                  << " *py: " << *py << "\n";

Terminamos la función y SIEMPRE retornamos a su punto de invocación o
llamada. Como hemos terminado esta sentencia 3), continuamos:

4)    std::cout << "Main. After swap, x: " << x
                << " y: " << y << "\n";

Mostramos un mensaje en la pantalla

5)    return 0;

Terminamos 'main()' con el código 0 (cero), para indicar que todo ha
ido correctamente.

> También observo que el swap después de main le siguen los {  bla bla bla }
> que engloban acciones.
>

Esto es porque hay que definir (o implementar) la función previamente
declarada. De lo contrario, esta función no realizará ninguna tarea
cuando se le invoque.


Aconsejo que vuelvas a los primeros capítulos del curso de C++ para
entender estas ideas fundamentales. Espero haber aclarado mucho más
los detalles.

Steven




Más información sobre la lista de distribución Cconclase