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.





  • 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_VER

    das 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)


Log in to reply