tipos sirve sintaxis que para funciones ejemplos datos comandos codigos c++

sirve - sintaxis de c++



¿No se utiliza incluye perjudicial en C/C++? (10)

Asumiré que todos los encabezados pueden considerarse "sinceros", es decir, que no están escritos con el objetivo de sabotear el código.

  • Por lo general, ralentizará la compilación (los encabezados precompilados mitigarán este punto)

  • implica dependencias donde ninguno realmente existe (esto es un error semántico, no es un error real)

  • las macros contaminarán tu código (mitigadas por el prefijo de las macros con nombres parecidos al espacio de nombres, como en BOOST_FOREACH en lugar de FOREACH)

  • un encabezado podría implicar un enlace a otra biblioteca. en algunos casos, un encabezado sin usar podría solicitarle al vinculador que vincule su código con una biblioteca externa (consulte el comentario #pragma de MSCV (lib, "") ). Creo que un buen enlazador no conservará la referencia de la biblioteca si no se utiliza (IIRC, el enlazador de MSVC no conservará la referencia de una biblioteca no utilizada).

  • un encabezado eliminado es una fuente menos de errores inesperados. si no confía en el encabezado (algunos codificadores son mejores que otros ...), eliminarlo elimina un riesgo ( no le gustará incluir un encabezado que cambie la alineación de la estructura de todo después de él: los errores generados son ... iluminando ... ).

  • la declaración de una variable static un encabezado contaminará su código. Cada declaración de variable estática dará como resultado una variable global declarada en su fuente compilada.

  • Los nombres de los símbolos C contaminarán tu código. Las declaraciones en el encabezado contaminarán tu espacio de nombres global o struct (y más probablemente, ambos, ya que las estructuras generalmente se escriben con tipos para llevar su tipo al espacio de nombres global). Esto es mitigado por las bibliotecas que anteponen sus símbolos con algún tipo de "nombre de espacio de nombres", como SDL_CreateMutex para SDL.

  • los nombres de los símbolos C ++ sin nombre contaminarán tu código. Por las mismas razones anteriores. Lo mismo ocurre con los encabezados que hacen un uso incorrecto de la declaración de using namespace . Ahora, el código correcto de C ++ dará espacio de nombre a sus símbolos. Sí, esto significa que generalmente no deberías confiar en un encabezado de C ++ que declare sus símbolos en el espacio de nombres global ...

¿Cuáles son las consecuencias negativas de incluir no utilizado?

Soy consciente de que dan como resultado un aumento en el tamaño de los binarios (¿o sí?), ¿Algo más?


Bueno, para que uno los deje allí solo se prolonga el tiempo de compilación y se agregan dependencias de compilación innecesarias .


El principal problema es el desorden . Estos son los tres aspectos principales en los que se manifiesta el desorden:

  1. Contaminación visual; mientras intentas figurarte, incluye lo que necesitas.

  2. Contaminación lógica; es más probable que tenga una colisión de funciones, más tiempo para compilar (puede ser realmente pequeño para un par de inclusiones, pero si se convierte en una "política" para no incluir las inclusiones innecesarias, podría convertirse en un obstáculo significativo).

  3. Opacidad de dependencia; dado que hay más encabezados para analizar, es más difícil determinar los ciclos de dependencia en su código. Saber cuáles son las dependencias en su código es crucial cuando su base de código crece a un nivel significativo más allá del nivel de aficionado.


En términos generales, sí, causa algunos problemas. Lógicamente hablando, si no lo necesita, no lo incluya.

  • Cualquier singleton declarado como externo en un encabezado y definido en un archivo fuente se incluirá en su programa. Obviamente, esto aumenta el uso de memoria y posiblemente contribuye a una sobrecarga de rendimiento al hacer que uno acceda a su archivo de página con más frecuencia (no es un gran problema ahora, ya que los singleton suelen ser de tamaño pequeño a mediano y la mayoría de las personas que conozco tienen más de 6 GB de RAM).

  • El tiempo de compilación aumenta, y para grandes proyectos comerciales donde uno compila a menudo, esto puede causar una pérdida de dinero. Puede que solo agregue unos pocos segundos a su tiempo total, pero multiplíquelo por varios cientos de compilaciones o puede que tenga que probar y depurar y obtendrá una enorme pérdida de tiempo que se traduce en una pérdida de beneficios.

  • Cuantos más encabezados tenga, mayor será la probabilidad de que tenga una colisión preestablecida con una macro que haya definido en su programa u otro encabezado. Esto se puede evitar mediante el uso correcto de los espacios de nombres, pero sigue siendo una tarea difícil de encontrar. Nuevamente, pérdida de ganancias.

  • Contribuye al código inflado (archivos más largos y, por lo tanto, más para leer) y puede aumentar en gran medida la cantidad de resultados que encuentre en la herramienta de autocompletado de IDE (algunas personas están religiosamente en contra de estas herramientas, pero sí aumentan la productividad).

  • Puede vincular accidentalmente otras bibliotecas externas en su programa sin siquiera saberlo.

  • Inadvertidamente puede causar el fin del mundo haciendo esto.


No necesariamente aumentan el tamaño del binario, pero aumentarán el tiempo de compilación.


Sí, pueden aumentar el tamaño binario debido a las variables externas no utilizadas.

//---- in unused includes ---- extern int /* or a big class */ unused_var; //---- in third party library ---- int unused_var = 13;


Si aumentan o no el tamaño binario realmente depende de lo que contienen.

El principal efecto secundario es probablemente el impacto negativo en la velocidad de compilación. Nuevamente, cuán grande es el impacto depende de lo que contienen, cuánto y si incluyen otros encabezados.


include significa que está agregando algunas declaraciones más. Entonces, cuando está escribiendo su propia función global, debe tener cuidado de que esa función ya esté declarada en el encabezado incluido.

Ex. si escribe su propia clase auto_ptr {} sin incluir "memoria", funcionará bien. pero cada vez que incluya memoria, el compilador genera un error ya que ha sido declarado en el archivo de encabezado de memoria


Representan un diseño torpe.

Si no está seguro de qué incluir y qué no incluir, muestra que el desarrollador no tenía idea de lo que estaba haciendo.

Los archivos de inclusión están destinados a incluirse solo cuando se necesitan. Puede que no sea tan problemático ya que la memoria y la velocidad de la computadora está creciendo a pasos agigantados estos días, pero quizás alguna vez.

Si no se necesita incluir, pero se incluye de todos modos, recomendaría poner un comentario al lado diciendo por qué lo incluyó. Si un nuevo desarrollador se conecta con tu código, te apreciará mucho, si lo has hecho de la manera correcta.


  • Aumenta el tiempo de compilación (problema potencialmente grave)
  • Contamina el espacio de nombres global.
  • Posible choque de nombres de preprocesador.
  • Si los encabezados no utilizados se incluyen desde bibliotecas de terceros, puede hacer que dichas bibliotecas se mantengan innecesariamente como dependencias.