aktiviere RTTI in C ++
Kann mir jemand sagen, wie aktiviere RTTI in c++ bei der Arbeit auf unix.
Ich habe gehört, dass es sein kann, deaktiviert und aktiviert.
auf meinem unix-Umgebung,wie könnte ich überprüfen, ob RTTI aktiviert oder deaktiviert ist?
Ich bin mit der aCC
compiler auf HPUX.
InformationsquelleAutor der Frage Vijay | 2010-04-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie mit
g++
oder einige andere compiler?In
g++
RTTI ist standardmäßig aktiviert wenn ich mich Recht erinnere, und Sie können es deaktivieren mit-fno-rtti
. Um zu testen, ob es aktiv ist oder nicht, verwendendynamic_cast
odertypeid
UPDATE
Ich glaube, dass HPUX ist
aCC
/aC++
hat auch RTTI standardmäßig aktiviert, und ich bin bewusst einen Weg, um es zu deaktivieren. Überprüfen Sie Ihreman
- Seiten.InformationsquelleAutor der Antwort vladr
gcc hat es standardmäßig aktiviert. Überprüfen Sie, ob typeid(foo).name() gibt Ihnen etwas nützliches.
Ohne RTTI bekommen Sie etwas wie:
InformationsquelleAutor der Antwort Eddy Pronk
Laut die docs es gibt keine option, um es auszuschalten. Der nur zwei bits von standard-C++ , können selektiv deaktiviert werden "Gültigkeitsbereich von Variablen in for-Schleifen" (
-Wc,ansi_for_scope,off
) und Argument-Dependent Lookup von Namen (-Wc,-koenig_lookup,off
). Es gibt keine option, ähnlich-Wc,-RTTI,off
InformationsquelleAutor der Antwort MSalters
Alle modernen C++ - Kompiler die ich kenne (GCC, Intel, MSVC, SunStudio, aCC) haben RTTI standardmäßig aktiviert, es sei denn, Sie haben alle den Verdacht, dass es möglicherweise deaktiviert aus irgendeinem Grund Sie können sicher davon ausgehen, dass RTTI in auf.
InformationsquelleAutor der Antwort Artyom
RTTI aktiviert oder deaktiviert beim kompilieren Ihr Programm über compiler-Optionen - es ist nicht etwas aktiviert oder deaktiviert, in der Unix-Umgebung weltweit. Der einfachste Weg, um zu sehen, ob es ist standardmäßig aktiviert, um dem compiler ist nur versuchen, kompilieren von code mithilfe von RTTI.
Optionen zum aktivieren/deaktivieren von RTTI wird compiler-spezifisch - welche compiler verwenden Sie?
RTTI-Unterstützung ist standardmäßig aktiviert in GCC die option
-fno-rtti
schaltet die Unterstützung (falls Sie mit der GCC und vielleicht hat Sie jemand ausgeschaltet RTTI in einem makefile oder so).InformationsquelleAutor der Antwort Michael Burr
Aktivieren und deaktivieren von RTTI muss eine compiler-spezifische Einstellung. Um für die
dynamic_cast<>
Betrieb, dietypeid
Betreiber oder Ausnahmen zu arbeiten, in C++ RTTI aktiviert werden muss. Wenn Sie erhalten kann der folgende code kompiliert, dann hast du schon RTTI aktiviert (die meisten Compiler wie g++ automatisch zu tun):InformationsquelleAutor der Antwort Vijay Mathew
In g++ können Sie testen, die
__GXX_RTTI
makro um zu sehen, ob RTTI ist in deinem code. Wie andere haben darauf hingewiesen-nicht-rtti dreht der RTTI in g++. Ich würde Wetten, diese beiden Dinge in clang als gut.In neueren C++ haben wir Zugang zu feature-Test-Makros
__cpp_rtti
und viele andere, die tese machen die Dinge einfacher.InformationsquelleAutor der Antwort emsr