Quiero saber la diferencia exacta entre el archivo de encabezado (como en MyHeader.hpp) y un namespace
en c++
?¿Cuál es la diferencia entre el archivo de encabezado y el espacio de nombres?
Respuesta
Los archivos de encabezado son archivos reales almacenados en el sistema de archivos, referenciado por nombre de archivo y #include
'd en otros archivos (al menos en C/C++ u otros idiomas utilizando el preprocesador de macros M4). Los archivos de encabezado generalmente agrupan fragmentos de código que son todas partes interdependientes del mismo elemento específico juntas. Por ejemplo, un juego puede tener un archivo de encabezado para todas sus representaciones gráficas. Los espacios de nombre, por otro lado, son un elemento del lenguaje de programación: no existen como un objeto de sistema de archivos, sino más bien como una designación dentro del código que le dice al compilador que ciertas cosas están dentro de ese espacio de nombres. Los espacios de nombre típicamente agrupan las interfaces (funciones, clases/estructuras, tipos) de elementos similares (pero no necesariamente interdependientes). Por ejemplo, el espacio de nombres std
en C++ contiene todas las clases y funciones de la Biblioteca estándar.
Un archivo de encabezado es un archivo que está destinado a ser incluido por los archivos fuente. Por lo general, contienen declaraciones de ciertas clases y funciones.
Un espacio de nombres habilita el código para categorizar los identificadores. Es decir, las clases, funciones, etc. se pueden colocar dentro de un espacio de nombres, manteniéndolos separados de otras clases que no están relacionadas. Por ejemplo, en C++ todo, desde la biblioteca estándar, está en el espacio de nombres std
.
Headerfile contiene prototipos, declaraciones. –
@Vish: ¿Me lo estás diciendo o preguntándome? Estrictamente hablando, no hay tal cosa como un prototipo; eso es solo una declaración. – GManNickG
En common man langauge, el archivo de encabezado sería un archivo único en el sistema de archivos y el espacio de nombres cubriría uno o más archivos.
es decir HeaderFile es una cosa física y el espacio de nombres es una cosa lógica.
aprender más sobre ellos aquí http://en.wikipedia.org/wiki/Namespace y http://en.wikipedia.org/wiki/Header_file
saber lo que es el archivo de cabecera, lo que necesita saber el significado de "declaración".
Para ponerlo en palabras simples, en C/C++, la compilación tiene lugar por fuente. Si tengo un A.cpp y en el interior hago uso de una función foo(), que se definirá en otro lugar, necesito decirle al compilador que: "Hola, estoy usando foo(), aunque no puedes verlo definido en cualquier lugar de mi fuente, no se preocupe, está definido en otra fuente ". La forma de decirle al compilador sobre esto es "declarar" foo() en A.cpp.
Si soy el autor de foo(), todos los que usan foo() deben escribir la declaración void foo(); en su archivo fuente. Será un montón de trabajo duplicado y sin sentido. Y es muy difícil para mí decirle al tipo que "usa" foo() que tenga una declaración correcta. Por lo tanto, como autor de foo(), escribo un archivo que contiene la declaración de uso de foo() y lo distribuyo para que las personas puedan simplemente "importar" el contenido del archivo a su fuente. El archivo que estoy distribuyendo es el archivo de encabezado. La acción de importación es #include en C/C++. Sí, #include no es más que insertar el contenido del archivo incluido en el lugar de #include.
Espacio de nombres es otra historia. Para ser breves, se puede pensar que es "verdadero" nombre de la función/clase etc. Por ejemplo, si hago
namespace FOO {
class Bar { }
}
La clase no es realmente nombrado Bar, que es "verdadero" nombre es, de hecho, FOO :: Bar.
C++ proporciona alguna forma de evitar que escriba el nombre real largo, mediante "usar".
El espacio de nombres es una nueva palabra dada a headerfile. Para hacer nuevas versiones disponibles.
Espacio de nombres es un nuevo concepto de 'ansi C++' para identificar los identificadores globales que se utilizarán con frecuencia en su programa.
¡El archivo de encabezado es un archivo fuente que respalda su programa al reutilizar un código confiable y probado, lo que ahorra tiempo y esfuerzo!
Su respuesta contiene información útil, y probablemente la hubiera recibido mejor si hubiera dedicado más esfuerzo a la redacción de un texto en inglés legible y hubiera dado más detalles. ¡Espero que tengas una buena experiencia en StackOverflow! – spruceb
¡Gracias! He hecho algunas ediciones La próxima vez mejoraré sobre ellos. –
- 1. Javascript: ¿diferencia entre el espacio de nombres y el cierre?
- 2. ¿Cuál es la diferencia entre: = y + = en el archivo make?
- 3. ¿Cuál es la diferencia entre .sqlite y el archivo .db?
- 4. Cacao: ¿Cuál es la diferencia entre importar en el encabezado e importar en el archivo principal?
- 5. ¿Cuál es la diferencia entre una clase estática y un espacio de nombres? (en C#)
- 6. ¿Cuál es la diferencia entre un espacio de nombres y un módulo en F #?
- 7. ¿Qué es el "encabezado HTTP sin procesar"? ¿Cuál es la diferencia entre "encabezado HTTP" y "encabezado HTTP sin procesar"?
- 8. ¿Cuál es la diferencia entre " " y ""?
- 9. ¿Cuál es la diferencia entre el mango y el hilo?
- 10. ¿cuál es la diferencia entre el objetivo y el proyecto?
- 11. Backbone.Js - ¿Cuál es la diferencia entre el y $ el?
- 12. ¿Cuál es la diferencia entre el NSImage y el UIImage?
- 13. ¿Cuál es la diferencia entre el JSP y el JSTL?
- 14. Diferencia entre el espacio de nombres en C# y el paquete en Java
- 15. ¿cuál es la diferencia entre el complemento y la biblioteca?
- 16. ¿Cuál es la diferencia entre el tenedor y el hilo?
- 17. Cuál es la diferencia entre el archivo: /, file: //, file: ///
- 18. ¿Cuál es el propósito de: "usar el espacio de nombres"?
- 19. ¿Cuál es la diferencia entre el archivo app.config y el archivo XYZ.settings?
- 20. El operador del Espacio de nombres ... ¿cuál es el problema?
- 21. ¿Cuál es la diferencia entre el
- 22. ¿Cuál es la diferencia entre el espacio de jQuery y los selectores?
- 23. ¿Cuál es la diferencia entre usar objetos y funciones para el espaciado de nombres en Javascript?
- 24. Creación de un espacio de nombres C++ en el encabezado y fuente (cpp)
- 25. ¿Cuál es la diferencia entre el colado y la coerción?
- 26. ¿cuál es la diferencia entre el material y la textura?
- 27. ¿Cuál es la diferencia entre el casting y la conversión?
- 28. ¿Cuál es la diferencia entre el marco y la arquitectura?
- 29. ¿Cuál es la diferencia entre la tubería y el zócalo?
- 30. DataContractSerializer - cambiar el espacio de nombres y deserializar el archivo vinculado al antiguo espacio de nombres
C no tiene espacios de nombres. – GManNickG