¿En qué casos deberíamos incluir cassert?¿En qué casos debemos incluir <cassert>?
Respuesta
Al igual que cualquier otro archivo de encabezado, usted #include <cassert>
cuando utiliza algo declarado en ese archivo de encabezado, como assert()
.
Gracias por una respuesta breve y clara :) – Jane
ve un fácil acceso reference
#include <iostream>
// uncomment to disable assert()
// #define NDEBUG
#include <cassert>
int main()
{
assert(2+2==4);
std::cout << "Execution continues past the first assert\n";
assert(2+2==5);
std::cout << "Execution continues past the second assert\n";
}
* Nitpicking *: cppreference.com es ** una referencia **, no ** la referencia **. Si desea consultar ** la referencia **, consulte "Norma internacional ISO/IEC 14882" o una de sus ediciones: "14882: 1998", "14882: 2003" o "14882: 2011". –
¡Muchas gracias por la ayuda! Estoy asustado por una pregunta tan estúpida. Lo haré ahora. – Jane
@Jane De nada. También, por favor, eche un vistazo a las preguntas frecuentes: http: // stackoverflow.com/faq – TemplateRex
En resumen, no lo use; use <assert.h>
.
C++ 11 eliminó cualquier garantía formal de un encabezado "c ...." que no contaminara el espacio de nombres global.
Nunca fue una garantía en la práctica, y ahora ni siquiera es una garantía formal.
Por lo tanto, con C++ 11 ya no hay ninguna ventaja concebible en el uso de las variantes de encabezado "c ....", mientras que existe la clara y clara desventaja de que el código funciona bien con un compilador y una versión de ese compilador puede no compilar con otro compilador o versión, debido, por ejemplo, a colisiones de nombres o diferentes selecciones de sobrecarga en el espacio de nombres global.
SO, mientras que cassert
no tenía sentido en C++ 03 (no se puede poner una macro en un espacio de nombres), es totalmente sin sentido, incluso como un caso especial de un esquema general, en C++ 11.
Addendum 22 Dic 2013:
La norma define cada C++ cabecera C <Xh> cabecera en términos de la cabecera <cX>, que a su vez se define en términos de la cabecera de la biblioteca C correspondiente.
C++ 11 §D.5/2:
cabecera “ Cada C, cada uno de los cuales tiene un nombre de la forma
name.h
, se comporta como si cada nombre colocado en el espacio de nombres biblioteca estándar por el correspondiente cname encabezado se coloca dentro del ámbito de espacio de nombres global. ”
C++ 11 §D.5/3 (ejemplo no normativo):
“ El encabezado
<cstdlib>
proporciona ciertamente sus declaraciones y definiciones dentro del espacio de nombresstd
. También puede proporcionar estos nombres dentro del espacio de nombres global. El encabezado<stdlib.h>
ciertamente proporciona las mismas declaraciones y definiciones dentro del espacio de nombres global, de forma muy similar al estándar C. También puede proporcionar estos nombres dentro del espacio de nombresstd
. ”
usuario C.R. ’ s comentario desbordamiento de pila me hizo consciente de que algunas versiones de g ++, como MinGW g ++ 4.7.2, son bastante no estándar con respecto a los encabezados <X.h>
, que carece de las sobrecargas de, p. sin
que el estándar C++ requiere:
ya que sabía que MinGW g ++ 4.7.2 también carece totalmente funciones tales como swprintf
, y que tiene deficiencias ídem en el C++ puro biblioteca tales como carente de C++ 11 std::to_string
. Sin embargo, la información sobre esto que carecía de las sobrecargas de la función C era nueva para mí.
En la práctica las sobrecargas que carecen con g ++ significa
ignorar el problema g ++, o
evitar el uso de la g faltante ++ sobrecargas,
por ejemplo usando sólodouble sin(double)
, outilizando el espacio de nombres
std
sobrecarga
(uno entonces necesita incluir<cmath>
para garantizar su presencia con g ++).
Para utilizar el g ++ std
espacio de nombres sobrecargas sin reservas, un enfoque práctico consiste en definir cabeceras envolturas para este compilador. He usado ese enfoque para abordar las deficiencias de g ++ wrt. a la familia printf
. Como dijo una vez David Wheeler, “ Todos los problemas en la informática se pueden resolver con otro nivel de direccionamiento indirecto ” & hellip;
Luego se pueden arreglar las cosas para que el código estándar que usa las sobrecargas que faltan de g ++ también compile con g ++. Esto ajusta el compilador al estándar, con una cantidad fija de código.
¡Gracias por tu explicación! :) – Jane
Estoy usando Visual Studio 10 Professional. ¿Quiere decir que usar
Es más significativo y la práctica general de usar encabezados [* .h] (con respecto a la biblioteca C) hace que el código sea un poco más robusto, con menos probabilidades de ser problemático con otros compiladores. –
assert.h define una función de macro que se puede utilizar como una herramienta de depuración estándar.
- 1. ¿Qué casos de esquina debemos tener en cuenta al analizar $ PATH en Linux?
- 2. ¿Por qué debemos incluir TTF, EOT, woff, SVG, ... en una fuente cara
- 3. ¿En qué casos son IEnumerable <T>. ¿Optimizado?
- 4. sin incluir <stdio.h>
- 5. ¿Por qué debemos asignar un clon a una nueva variable?
- 6. ¿Cuál es la diferencia entre <jsp: incluir página = ...> y <% @ incluir archivo = ...>?
- 7. ¿Qué significa <? = Mean?
- 8. ¿Cuándo debemos llamar a System.exit en Java
- 9. ¿En qué casos necesitamos una herencia protegida?
- 10. En qué casos estará HTTP_REFERER vacío
- 11. ¿Por qué no puedo incluir IEnumerable <struct> como IEnumerable <object>?
- 12. Error fatal al incluir <stdlib>
- 13. Sin incluir #include <ctype.h>
- 14. En PHP, ¿qué representa "<<<"?
- 15. Recolección de basura, ¿debemos confiar en ella?
- 16. ¿Cuándo debemos establecer UseShellExecute en True?
- 17. Qt ¿qué encabezados incluir?
- 18. ¿Qué es objc_setAssociatedObject() y en qué casos debería usarse?
- 19. cómo incluir 5 <BR> 's en Haml?
- 20. ¿Qué sintaxis para incluir subpaquetes en <contexto: componente-escanear>?
- 21. Super.tap {} - ¿qué hace y usa casos?
- 22. ¿Qué casos de uso para OWL?
- 23. Cambiar declaración> ¿es posible incluir múltiples coincidencias de casos en un solo caso?
- 24. ¿Cuándo se debe incluir un sistema como actor en el diagrama de casos de uso?
- 25. ¿Es válido incluir imágenes con <object> en lugar de <img>?
- 26. ¿Qué significa << representa en python?
- 27. ¿Qué significa << hacer en Python?
- 28. ¿Qué significa "<< -" en Ruby?
- 29. Php ¿qué significa <<<?
- 30. Casos de prueba, "cuándo", "qué" y "por qué"?
+1 para contrarrestar downvotes inexplicables. –
@ cerrar-votantes: por favor vote solo sobre preguntas que usted entienda. su falta de comprensión NO implica una falta de significado, o que es imposible responder una pregunta. tu falta de comprensión solo indica que no entiendes, que es lo contrario de ser competente para votar sobre el asunto. –
¿Cómo es * esta no una verdadera pregunta *? Porque es corto? Esta es una pregunta legítima. No está fuera del tema, es real, no demasiado localizado y no es nada constructivo. Es posible que sea una víctima, pero no estoy seguro. Si esto se cierra, lo reabriré * inmediatamente *. –