The C library includes the same definitions as the C language library organized in the same structure of header files, with the following differences: Each header file has the same name as the C language version but with a ' c ' prefix and no extension. Estas en el tema de Duda librerias en C o ficheros de cabecera en el foro de C/C en Foros del Web. Hola, bueno, mi duda es que cuando uno crea una libreria para poder usarla la tengo que poner en el archivo include de devcpp, pero.
-->Los nombres de elementos de programa como variables, funciones, clases, etc. deben declararse antes de que se puedan utilizar.The names of program elements such as variables, functions, classes, and so on must be declared before they can be used.Por ejemplo, no puede
x = 42
escribir sin declarar primero 'x'.For example, you can't just write x = 42
without first declaring 'x'.La declaración indica al compilador si el elemento es un int, un double, una función, una clase o alguna otra cosa.The declaration tells the compiler whether the element is an int, a double, a function, a class or some other thing.Además, cada nombre debe declararse (directa o indirectamente) en cada archivo .cpp en el que se utiliza.Furthermore, each name must be declared (directly or indirectly) in every .cpp file in which it is used.Al compilar un programa, cada archivo .cpp se compila de forma independiente en una unidad de compilación.When you compile a program, each .cpp file is compiled independently into a compilation unit.El compilador no tiene conocimiento de qué nombres se declaran en otras unidades de compilación.The compiler has no knowledge of what names are declared in other compilation units.Esto significa que si define una clase o función o variable global, debe proporcionar una declaración de ese objeto en cada archivo .cpp adicional que lo utilice.That means that if you define a class or function or global variable, you must provide a declaration of that thing in each additional .cpp file that uses it.Cada declaración de esa cosa debe ser exactamente idéntica en todos los archivos.Each declaration of that thing must be exactly identical in all files.Una ligera incoherencia provocará errores, o un comportamiento no intencionado, cuando el vinculador intente combinar todas las unidades de compilación en un solo programa.A slight inconsistency will cause errors, or unintended behavior, when the linker attempts to merge all the compilation units into a single program.
Para minimizar la posibilidad de errores, C++ ha adoptado la convención de usar archivos de encabezado para contener declaraciones.To minimize the potential for errors, C++ has adopted the convention of using header files to contain declarations.Las declaraciones se realizan en un archivo de encabezado y, a continuación, se usa la directiva #include en cada archivo .cpp u otro archivo de encabezado que requiera esa declaración.You make the declarations in a header file, then use the #include directive in every .cpp file or other header file that requires that declaration.La directiva #include inserta una copia del archivo de encabezado directamente en el archivo .cpp antes de la compilación.The #include directive inserts a copy of the header file directly into the .cpp file prior to compilation.
Nota
En Visual Studio 2019, la característica de módulos C++20 se presenta como una mejora y reemplazo final para los archivos de encabezado.In Visual Studio 2019, the C++20 modules feature is introduced as an improvement and eventual replacement for header files.Para obtener más información, consulte Información general de los módulos en C++.For more information, see Overview of modules in C++.
EjemploExample
En el ejemplo siguiente se muestra una forma común de declarar una clase y, a continuación, usarla en un archivo de origen diferente.The following example shows a common way to declare a class and then use it in a different source file.Comenzaremos con el archivo
my_class.h
de encabezado, .We'll start with the header file, my_class.h
.Contiene una definición de clase, pero tenga en cuenta que la definición está incompleta; la función do_something
miembro no está definida:It contains a class definition, but note that the definition is incomplete; the member function do_something
is not defined:A continuación, cree un archivo de implementación (normalmente con una extensión .cpp o similar).Next, create an implementation file (typically with a .cpp or similar extension).Llamaremos al archivo my_class.cpp y proporcionaremos una definición para la declaración de miembro.We'll call the file my_class.cpp and provide a definition for the member declaration.Agregamos
#include
una directiva para el archivo 'my_class.h' con el fin de que la declaración <iostream>
de my_class inserten en este momento en el archivo .cpp, e incluimos para extraer la declaración para std::cout
.We add an #include
directive for 'my_class.h' file in order to have the my_class declaration inserted at this point in the .cpp file, and we include <iostream>
to pull in the declaration for std::cout
.Tenga en cuenta que las comillas se utilizan para los archivos de encabezado en el mismo directorio que el archivo de origen, y los corchetes angulares se utilizan para los encabezados de biblioteca estándar.Note that quotes are used for header files in the same directory as the source file, and angle brackets are used for standard library headers.Además, muchos encabezados de biblioteca estándar no tienen .h ni ninguna otra extensión de archivo.Also, many standard library headers do not have .h or any other file extension.En el archivo de implementación, opcionalmente podemos usar una instrucción using para evitar tener que calificar cada mención de 'my_class' o 'cout' con 'N::' o 'std::'.In the implementation file, we can optionally use a using statement to avoid having to qualify every mention of 'my_class' or 'cout' with 'N::' or 'std::'.¡No ponga sin instrucciones using en los archivos de encabezado!Don't put using statements in your header files!
Ahora podemos
my_class
usar en otro archivo .cpp.Now we can use my_class
in another .cpp file.Hemos #include el archivo de encabezado para que el compilador extraiga la declaración.We #include the header file so that the compiler pulls in the declaration.Todo lo que el compilador necesita saber es que my_class do_something()
es una clase que tiene una función miembro pública llamada .All the compiler needs to know is that my_class is a class that has a public member function called do_something()
.Libreria De Archivos De Cabecera Dev.c Puerto Rico
Una vez que el compilador termina de compilar cada archivo .cpp en archivos .obj, pasa los archivos .obj al vinculador.After the compiler finishes compiling each .cpp file into .obj files, it passes the .obj files to the linker.Cuando el vinculador combina los archivos de objeto, encuentra exactamente una definición para my_class; se encuentra en el archivo .obj generado para my_class.cpp y la compilación se realiza correctamente.When the linker merges the object files it finds exactly one definition for my_class; it is in the .obj file produced for my_class.cpp, and the build succeeds.
Incluir guardiasInclude guards
Normalmente, los archivos de encabezado
#pragma once
tienen una protección de inclusión o una directiva para asegurarse de que no se insertan varias veces en un único archivo .cpp.Typically, header files have an include guard or a #pragma once
directive to ensure that they are not inserted multiple times into a single .cpp file.Libreria De Archivos De Cabecera Dev.c De
Qué poner en un archivo de encabezadoWhat to put in a header file
Dado que varios archivos pueden incluir un archivo de encabezado, no puede contener definiciones que puedan generar varias definiciones del mismo nombre.Because a header file might potentially be included by multiple files, it cannot contain definitions that might produce multiple definitions of the same name.No se permite lo siguiente, o se consideran muy malas prácticas:The following are not allowed, or are considered very bad practice:
- Definiciones de tipo integradas en el espacio de nombres o ámbito globalbuilt-in type definitions at namespace or global scope
- definiciones de funciones no en líneanon-inline function definitions
- definiciones de variables no constnon-const variable definitions
- definiciones agregadasaggregate definitions
- espacios de nombres sin nombreunnamed namespaces
- Directivas usingusing directives
El uso de la directiva using no necesariamente provocará un error, pero puede provocar un problema porque pone el espacio de nombres en el ámbito de cada archivo .cpp que incluye directa o indirectamente ese encabezado.Use of the using directive will not necessarily cause an error, but can potentially cause a problem because it brings the namespace into scope in every .cpp file that directly or indirectly includes that header.
Archivo de encabezado de ejemploSample header file
En el ejemplo siguiente se muestran los distintos tipos de declaraciones y definiciones que se permiten en un archivo de encabezado:The following example shows the various kinds of declarations and definitions that are allowed in a header file: