Diese Antwort und ihre Vielzahl von Duplikaten weisen darauf hin, dass ich sie verwenden sollte #include <c*>
für die C-Header, die ich in C++-Code ziehe und mit denen ich sie aufrufen sollte std::*
.
Ich habe das getan, aber ich bemerke eine Ausnahme. std::assert
scheint nicht definiert zu sein, auch wenn ich richtig bin #include <cassert>
.
Was ist denn hier los? Handelt es sich um ein Versehen bei der Umsetzung oder um eine tatsächliche Ausnahme?
assert
ist ein Makro– smac89
9. Mai 2016 um 19:46 Uhr
assert
wird höchstwahrscheinlich als Makro implementiert, das nicht im Namensraum verwendet werden kann (weil es keine Sprachkennung erzeugt, wie es die Inline-Funktion tut).– myaut
9. Mai 2016 um 19:46 Uhr
@SergeyA Hast du deinen Code noch nie getestet … jemals?
– Barri
9. Mai 2016 um 19:54 Uhr
@SergeyA: Da bin ich bei dir. Funktionalität, die aufhört, Dinge zu tun, wenn Sie in der Produktion sind. Also völlig unterschiedliches Verhalten für Produktions- und Debug-Code. Wenn nur beim Testen und nicht in der Produktion etwas schief geht, dann haben Sie einen außergewöhnlichen Code. Oh hey warte, wir haben etwas für Ausnahmesituationen.
– Martin York
9. Mai 2016 um 19:58 Uhr
@SergeyA: Es hat einen Wert für Leute, die Ihre Behauptung finden “Alle komischen Dinge mit ungültig gemachten Varianten passieren normalerweise in optimiertem Code” falsch sein.
– Benjamin Lindley
9. Mai 2016 um 20:00 Uhr