HeTPro-Tutoriales

Creamos tutoriales de electrónica digital para estudiantes, profesionistasy hoobistas de la electrónica, robótica o mecatronica. Tenemos tutoriales de Arduino, QT-Creator, OpenCV, Electrónica analógica y digital, entre otros temas.

Namespace: C/C++ Espacio de nombres

C++ Espacio de nombres o namespace

Definición

Muchas de las bibliotecas que podemos utilizar en C++ tendrán un espacio de nombres (o namespace en ingles) definido, este usualmente es particular para las instrucciones de la biblioteca. Vamos a encontrar espacio de nombres para bibliotecas C++ para por ejemplo OpenCV, Beaglebone Black, Raspberry PI, Arduino, AVR, PIC, etc.

Un espacio de nombres sirve para distinguir entre funciones que puedan llegar a tener un nombre similar en dos bibliotecas diferentes, un clásico ejemplo son las bibliotecas con funciones con nombre de “fprintf” en donde existen varias bibliotecas con ese nombre de función. En la literatura podemos encontrar varios ejemplos en donde se hace referencia a dos personas con el mismo nombre dentro de un salón y la confusión que esto puede generar al llamar a una de las dos solo con el nombre sin hacer referencia a algún otro parametro como apellido, apodo, descripción fisica, etc.

namespace1
Confusión al llamar una función.
namespace2
Uso del namespace para diferenciar funciones.

Declarar un namespace

Supongamos un pequeño ejemplo en donde nosotros creamos o descargamos bibliotecas para nuestro programa, digamos que por ahí en nuestro programa principal mandamos llamar la siguiente función

[code language=»cpp»]
int resultado = operacion(5,3);
[/code]

Suponiendo que tenemos entre otras bibliotecas, dos de ellas, que tienen declaradas las función “operación” se encuentran agregadas en nuestro programa principal. Suponiendo que las funciones están declaradas como se muestra a continuación:

[code language=»cpp»]
foo.h

int respuesta = operación ( int a, int b){
                return a+b;
}
[/code]

[code language=»cpp»]
bar.h

int respuesta = operación ( int a, int b){
                return a-b;
}
[/code]

Entonces cuando se mande a llamar en el programa,

[code language=»cpp»]
int resultado = operacion(5,3);
[/code]

la variable resultado que valor tendría 8 o 2?. Es por esto que se hace uso de espacio de nombres en donde nos quedaría como sigue.

[code language=»cpp»]
foo.h

namespace na{
int respuesta = operación ( int a, int b){
                return a+b;
    }
}
[/code]

[code language=»cpp»]
bar.h

namespace nb{
int respuesta = operación ( int a, int b){
                return a-b;
    }
}
[/code]

 

Uso de un namespace

En donde al momento de llamar el código podemos mandar a llamar un espacio de nombres de la siguiente manera:

[code language=»cpp»]
using namespace na
int resultado = operacion(5,3);
[/code]

En este caso la respuesta seria 2, y si llamamos

[code language=»cpp»]
using namespace nb
int resultado = operacion(5,3);
[/code]

La respuesta seria 8.

Aunque podemos llamar al inicio del programa el espacio de nombres con la función “using namespace” lo mas recomendamble es mandar llamar para cada función su espacio de nombres, aunque es un poco mas pesado a la hora de escribir, evitaremos manejar un solo espacio de nombres y caer en problemas similares, lo mas correcto seria:

[code language=»cpp»]

int resultado1 = nb::operacion(5,3);
int resultado2 = na::operacion(5,3);

[/code]

en donde resultado1 tendria un valor de 2 y resultado2 tendra el valor de 8.

En la mayoría de los casos bastara con usar “using namespace” sin embargo es importante conocer la diferencia entre usar un solo espacio de nombres y usarlos en especifico, ya depende de cada uno como es que desee utilizarlos, espero que quede claro este tutorial y te ayude a entender un poco mas acerca del espacio de nombres.

Es muy probable que sean pocas las veces que necesites crear una biblioteca con namespace o espacio de nombres predefinido, sin embargo estamos mas que seguros que mas de una vez te tocara utilizar o ver un namespace y esperamos que cuando lo hagas con la información presentada ayude un poco a entender la función.

Este tutorial fue escrito por staff de HeTPro:
www.hetpro.com
www.hetpro.com.mx
http://en.wikipedia.org/wiki/Namespace

2 comentarios en «Namespace: C/C++ Espacio de nombres»

  1. Buenísima la explicación, muchísimas gracias!
    Una única corrección: dentro de la sección «Uso de un namespace» figura lo sgte.:

    «En donde al momento de llamar el código podemos mandar a llamar un espacio de nombres de la siguiente manera:

    [code language=»cpp»]
    using namespace na
    int resultado = operacion(5,3);
    [/code]

    En este caso la respuesta seria 2, y si llamamos

    [code language=»cpp»]
    using namespace nb
    int resultado = operacion(5,3);
    [/code]

    La respuesta seria 8.»

    Creo que en el primer caso la respuesta sería 8 y en el segundo caso la respuesta sería 2, es decir, al revés de como está escrito.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *