Vordefinierte Compiler Macros
-
hallo liebes forum:)
ich habe ein problem mit ein paar compiler macros und wollte fragen wo und von wem diese definiert werden können.
um nicht alle aufzuzählen poste ich vorerst mal nur eines:
_IS_WRS
ich habe schon fleißig im internet gesucht, allerdings habe ich nicht herausgefunden welcher compiler dieses macro definiert.
die endung WRS könnte windowsressource bedeuten, wobei ich mir hier auch nicht ganz sicher bin.
wenn mir jemand weiterhelfen könnte wäre ich sehr dankbar.
-
Welcher Compiler?
MS-VC8: http://msdn2.microsoft.com/en-us/library/b0084kay(VS.80).aspx
-
ich benutze einen GNUc/c++ compiler.
jedoch habe cih ein headerfile welches diverse "defines" definiert, abhängig davon welche macros gesetzt sind. in diesem header kommt eben auch eine abfrage#if _IS_WRS
ich habe viele der anderen vordefinierten macros deuten können, aber _IS_WRS konnte ich nirgends finden.
in der von mir gekauften software wird es auch an keiner anderen stelle definiert.
danke für die hilfe und vor allem schnelle antwort jochen
-
wie gesagt benutze ich den gnu compiler
um aber mein headerfile zu verstehen wäre es sehr nett wenn mir jemand sagen könnte ob es eine seite gibt auf der erklärt wird was folgende macros bewirken oder bedeuten und vor allem ob sie vom compiler oder an einer anderen stelle definiert werden.hier eine kleine liste:
sollten meine beiträge schlecht gepostet sein und evtl. unklar sagt mir bitte bescheid_IS_WRS
cplusplus
__GNUC__
__STDC_HOSTED
__STDC_IEC_559__
__STDC_IEC_559_COMPLEX__
__STDC_ISO_10646__
i386
__i386
__i386__
_M_IX86
__RTP__
__BORLANDC__
__EDG__
__MINGW32__
sparc
__sparc
__arch64__
__MIPSEL
__MIPS
__MIPS__
__mips
_M_MRX000
__s390__
__ppc__
_POWER
_M_PPC
__APPLE__
__hppa
_M_ALPHA
_ARM_
__arm
__ARMEB__
_M68K_
_SH4_
__sh
__sh__
_M_IA64
_MACH_I32
_LP64
__x86_64
__linux
__linux__
_WIN32_WCE
_HAS_C9X
_C99
ECPP
ABRCPP
__STDC_VERSION
_STD_USING
__SUNPRO_CC
__CYGWIN__
_MSC_VERdas sind jetzt ca 70% aller macros die ich nicht finden konnte, wenn mir jemand weiterhelfen kann bin ich sehr dankbar
lieben gruß an alle helfer und einen schönen tag
-
Eine ziemlich bunte Mischung. Ich bezweifle, daß irgendwer diese Makros alle gesammelt hat. Einige davon werden von bestimmten Compilern (__GNU_C__ oder _MSC_VER) definiert, andere je nach drunterliegendem System (i386=Intel, sparc, _M_ALPHA). Offiziell sind afaik nur "__cplusplus" (Unterscheidung zwischen C- und C++ Compilern) und "_STD_USING" (damit erklärt der Compiler, daß er sich an den ANSI-Standard hält).
Ansonsten: Wenn die Doku deines Compilers sich nicht zu einem Makro äußert, verwendet er es höchstwahrscheinlich nicht (darf man fragen, aus was für einem Header diese Makros stammen? zufälligerweise eine Boost-Bibliothek?)
-
danke cstoll:)
das hilft mir weiter
ich weiß zwar gerade nicht was du unter einer boost bibliothek verstehst aber der header nennt sich yvals.h, vllt beantwortet dass deine frage.der header legt aufgrund der defines fest ob bspw. big oder little endian, eine win32lib oder eine posixlib verwendet wird oder wie groß wcharmax bzw wcharmin sind
ich möchte bloß herrausfinden woher die einzelnen defines kommen um zu verstehen was in dem header geschieht:)
besten dank für die hilfe und nen freundlichen gruß
-
Oft ist es ja auch gewollt, dass der Compiler/Präprozessor das Makro nicht kennt.
Z.B. "__APPLE__" soll ja gerade unbekannt/nicht definiert sein, wenn man für Windows compiliert.
-
Moosi-M schrieb:
ich weiß zwar gerade nicht was du unter einer boost bibliothek verstehst aber der header nennt sich yvals.h, vllt beantwortet dass deine frage.
OK, das klingt nicht wirklich nach Boost.
der header legt aufgrund der defines fest ob bspw. big oder little endian, eine win32lib oder eine posixlib verwendet wird oder wie groß wcharmax bzw wcharmin sind
ich möchte bloß herrausfinden woher die einzelnen defines kommen um zu verstehen was in dem header geschieht:)
Diese Festlegungen sind sowieso abhängig vom verwendeten System. Und ob es für dich wirklich hilfreich ist zu wissen, wie auf einem PowerPC die int-Darstellung umgesetzt wird, ist da noch die andere Frage. (im Klartext: Die #ifdef-Abschnitte, die du nicht kennst, kannst du idR auch ignorieren)