such stdc sirve que para mac libreria fatal error biblioteca c++ c++11 portability c++14 turbo-c++ c++03 c++-faq implementation-defined-behavior

sirve - ¿Por qué no debería#incluir<bits/stdc++. H>?



fatal error bits stdc++ h no such file or directory (3)

Publiqué una pregunta con mi código cuya única directiva #include fue la siguiente:

#include <bits/stdc++.h>

Mi maestra me dijo que hiciera esto, pero en la sección de comentarios me informaron que no debía.

¿Por qué?


¿Por qué? Porque se usa como si se suponía que fuera un encabezado estándar de C ++, pero ningún estándar lo menciona. Por lo tanto, su código no es portátil por construcción. No encontrará ninguna documentación para ello en cppreference . Por lo tanto, bien podría no existir. Es un producto de la imaginación de alguien :)


Hay un sitio de Stack Exchange llamado Programming Puzzles & Code Golf . Los acertijos de programación en ese sitio se ajustan a esta definición de puzzle : "un juguete, un problema u otra invención diseñada para divertirse presentando dificultades que deben ser resueltas por ingenio o esfuerzo paciente". Están diseñados para divertir, y no de la manera en que un programador que trabaja podría divertirse con un problema del mundo real que se encuentra en su trabajo diario.

Code Golf es "un tipo de competencia de programación de computadoras recreativas en la cual los participantes se esfuerzan por lograr el código fuente más corto posible que implemente un cierto algoritmo". En las respuestas en el sitio PP&CG, verá que las personas especifican el número de bytes en sus respuestas. Cuando encuentren una manera de reducir algunos bytes, tacharán el número original y registrarán el nuevo.

Como es de esperar, el golf de código premia el abuso extremo del lenguaje de programación. Nombres de variables de una letra. Sin espacios en blanco. Uso creativo de las funciones de la biblioteca. Características no documentadas. Prácticas de programación no estándar. Hacks espantosos.

Si un programador presentó una solicitud de extracción en el trabajo que contiene un código de estilo golf, sería rechazado. Sus compañeros de trabajo se reirían de ellos. Su gerente pasaría por su escritorio para conversar. Aun así, los programadores se divierten enviando respuestas a PP&CG.

¿Qué tiene esto que ver con stdc ++. H? Como otros han señalado, usarlo es perezoso. No es portátil, por lo que no sabe si funcionará en su compilador o en la próxima versión de su compilador. Fomenta los malos hábitos. No es estándar, por lo que el comportamiento de su programa puede diferir de lo que espera. Puede aumentar el tiempo de compilación y el tamaño del ejecutable.

Todas estas son objeciones válidas y correctas. Entonces, ¿por qué alguien usaría esta monstruosidad?

Resulta que a algunas personas les gusta programar rompecabezas sin el código golf . Se reúnen y compiten en eventos como ACM-ICPC, Google Code Jam y Facebook Hacker Cup, o en sitios como Topcoder y Codeforces. Su rango se basa en la corrección del programa, la velocidad de ejecución y la rapidez con que presentan una solución. Para maximizar la velocidad de ejecución, muchos participantes usan C ++. Para maximizar la velocidad de codificación, algunos de ellos usan stdc ++. H.

¿Es esta una buena idea? Veamos la lista de desventajas. ¿Portabilidad? No importa, ya que estos eventos de codificación utilizan una versión de compilador específica que los concursantes conocen de antemano. Cumplimiento de normas? No es relevante para un bloque de código cuya vida útil es inferior a una hora. ¿Tiempo de compilación y tamaño ejecutable? Estos no son parte de la rúbrica de puntuación del concurso.

Entonces nos quedamos con malos hábitos. Esta es una objeción válida. Al usar este archivo de encabezado, los concursantes evitan la oportunidad de aprender qué archivo de encabezado estándar define la funcionalidad que están usando en su programa. Cuando escriben código del mundo real (y no usan stdc ++. H) tendrán que pasar tiempo buscando esta información, lo que significa que serán menos productivos. Esa es la desventaja de practicar con stdc ++. H.

Esto plantea la pregunta de por qué vale la pena participar en la programación competitiva, si fomenta malos hábitos como usar stdc ++. H y violar otros estándares de codificación. Una respuesta es que las personas lo hacen por la misma razón por la que publican programas en PP&CG: a algunos programadores les resulta agradable usar sus habilidades de codificación en un contexto similar a un juego.

Entonces, la cuestión de si usar stdc ++. H se reduce a si los beneficios de la velocidad de codificación en un concurso de programación superan los malos hábitos que uno podría desarrollar al usarlo.

Esta pregunta es: "¿Por qué no debería <bits/stdc++.h> ?" Me doy cuenta de que se hizo y respondió para hacer un punto, y la respuesta aceptada pretende ser la única respuesta verdadera a esta pregunta. Pero la pregunta no es "¿Por qué no debería <bits/stdc++.h> en el código de producción?" Por lo tanto, creo que es razonable considerar otros escenarios en los que la respuesta puede ser diferente.


La inclusión de <bits/stdc++.h> parece ser algo cada vez más común en , quizás algo recién agregado a un plan de estudios nacional en el año académico actual.

Me imagino que las ventajas se dan vagamente así:

  • Solo necesita escribir una línea #include
  • No necesita buscar en qué encabezado estándar está todo.

Desafortunadamente, este es un hack perezoso, nombrando un encabezado interno GCC directamente en lugar de encabezados estándar individuales como <string> , <iostream> y <vector> . Arruina la portabilidad y fomenta hábitos terribles.

Las desventajas incluyen:

  • Probablemente solo funcionará en ese compilador
  • No tiene idea de lo que hará cuando lo use, porque su contenido no está establecido por un estándar
  • Incluso solo actualizar su compilador a su propia próxima versión puede interrumpir su programa
  • Cada encabezado estándar debe analizarse y compilarse junto con su código fuente, que es lento y da como resultado un ejecutable voluminoso bajo ciertas configuraciones de compilación

¡No lo hagas!

Más información:

  • #include <bits / stdc ++. h> con Visual Studio no compila
  • ¿Cómo #include <bits / stdc ++. H> funciona en C ++?

Ejemplo de por qué Quora es mala: