Hi Leo,
was meinst du mit
das ist falsch. VERIFY() ist im Gegensatz zu ASSERT() zwar auch in einem Release-Build definiert, aber
wertet den Ausdruck dann nicht aus. Der Unterschied ist dabei, dass das ASSERT()-Makro in Release samt
Argument entfernt wird, das Argument von VERIFY() wird aber ausgeführt.
das war unglücklich ausgedrückt. Ich kopier mal den entsprechenden Absatz aus der MSDN rein:
"The expression argument to ASSERT will not be evaluated in the release version of your program. If you want the expression to be evaluated in both debug and release versions, use the VERIFY macro instead of ASSERT. In debug versions, VERIFY is the same as ASSERT. In release versions, VERIFY evaluates the expression argument but does not check the result."
Was ich meinte war, daß das Ergebnis des Arguments von VERIFY in einem Release-Build nicht ausgewertet wird, d.h. im Fall dass der Ausdruck FALSE ergibt keine Warnung erzeugt wird.
Es gibt übrigens noch mehr solche Makros, z.B. _ASSERTE (der Ausdruck, der den DebugBreak ausgelöst hat, wird mit angezeigt), ASSERT_VALID (MFC-Makro, prüft von CObject abgeleitete Klassen in dem es deren AssertValid Methode aufruft), ASSERT_KINDOF, usw.
Gib' einfach mal im Index der MSDN "assert" (ohne Anführungszeichen) ein, da kommt eine ganze Liste.
Gruß,
Martin