Compiler detecton

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Max

    Compiler detecton

    Is there a way to detect the compiler being used? Namely, is there a
    way to have lines of code that are included or ignored by specific
    compilers. Or, better, finding certain compiler behaviors to use/
    avoid. For example, Visual Studio automatically inserts a
    system("PAUSE") statement. Is there any way to detect that VS is being
    used and not compile the equivalent line in my program?
  • =?UTF-8?B?RXJpayBXaWtzdHLDtm0=?=

    #2
    Re: Compiler detecton

    On 2008-02-08 22:50, Max wrote:
    For example, Visual Studio automatically inserts a system("PAUSE")
    statement. Is there any way to detect that VS is being used and not
    compile the equivalent line in my program?
    Is that something they have started doing recently, because that has
    never happened for me.

    Or, less sarcastic: No, VS does not insert anything in your code, but if
    you use Ctrl+F5 to run your program from the IDE it will be started
    using a batch-file which waits for input before terminating after your
    program has returned. If you do not want that you can use just F5 to
    start the program.

    --
    Erik Wikström

    Comment

    • Walter Bright

      #3
      Re: Compiler detecton

      Max wrote:
      Is there a way to detect the compiler being used? Namely, is there a
      way to have lines of code that are included or ignored by specific
      compilers. Or, better, finding certain compiler behaviors to use/
      avoid. For example, Visual Studio automatically inserts a
      system("PAUSE") statement. Is there any way to detect that VS is being
      used and not compile the equivalent line in my program?
      With the Digital Mars C++ compiler,

      #if __DMC___
      .... insert Digital Mars C++ specific code here ...
      #endif

      works.

      ----------------
      Walter Bright
      http://www.digitalmars.com C, C++, D programming language compilers

      Comment

      • Andrey Tarasevich

        #4
        Re: Compiler detecton

        Max wrote:
        Is there a way to detect the compiler being used? Namely, is there a
        way to have lines of code that are included or ignored by specific
        compilers. Or, better, finding certain compiler behaviors to use/
        avoid. For example, Visual Studio automatically inserts a
        system("PAUSE") statement. Is there any way to detect that VS is being
        used and not compile the equivalent line in my program?
        As others said, use compiler-specific macros. It is '_MSC_VER' for VC.

        You can "reverse-engineer" a list of specific macros for different compilers
        from this header file (Trolltech)



        Scroll down to the list of compilers (line 183).

        (I couldn't find a nicer list right away, although I'm sure I've seen it somewhere.)

        --
        Best regards,
        Andrey Tarasevich

        Comment

        • James Kanze

          #5
          Re: Compiler detecton

          On Feb 8, 10:50 pm, Max <maxh.is.h...@g mail.comwrote:
          Is there a way to detect the compiler being used? Namely, is
          there a way to have lines of code that are included or ignored
          by specific compilers. Or, better, finding certain compiler
          behaviors to use/ avoid. For example, Visual Studio
          automatically inserts a system("PAUSE") statement. Is there
          any way to detect that VS is being used and not compile the
          equivalent line in my program?
          As others have pointed out, almost every compiler pre-defines
          some preprocessor symbols to identify itself, hoping that they
          won't conflict with those of any other compiler. But a more
          pertinant question, in my mind, would be why you would want to
          depend on this. First, of course, most code (99% or more)
          should be written so that it doesn't matter. And for that that
          does, the symbols are generally defined in a way that only
          allows you to use #ifdef, which of course makes the code rapidly
          unreadable and unmaintainable. What you really want is 1) one
          common symbol which will resolve to the name of a directory, so
          you can build up includes to get the right headers *and* system
          dependent code, and possibly 2) common symbols which define the
          presence or absense of specific features, or how they work (e.g.
          things like GB_allowedDirec torySeparators, which can be either
          "/" or "\\/"---or maybe something completely different on a
          platform I don't currently target). In my experience, the best
          way to handle the first is in the command line in the make
          file---that needs to be adopted to each compiler anyway, and
          adding something like /Dsyst=windows to it doesn't really cause
          any additional problems. Or---what I actually use---you can add
          a /I option with the directory where you put the system specific
          headers. And the second is easily handled once you've done
          this; you pick up the defined from a system dependent header.

          As for a tool which automatically inserts code which you don't
          want, the simple answer is: don't use it.

          --
          James Kanze (GABI Software) email:james.kan ze@gmail.com
          Conseils en informatique orientée objet/
          Beratung in objektorientier ter Datenverarbeitu ng
          9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

          Comment

          • Stefan Naewe

            #6
            Re: Compiler detecton

            On 2/8/2008 10:50 PM, Max wrote:
            Is there a way to detect the compiler being used? Namely, is there a
            way to have lines of code that are included or ignored by specific
            compilers. Or, better, finding certain compiler behaviors to use/
            avoid. For example, Visual Studio automatically inserts a
            system("PAUSE") statement. Is there any way to detect that VS is being
            used and not compile the equivalent line in my program?
            Maybe this helps:

            Download Pre-defined Compiler Macros for free. Overview of pre-defined compiler macros for standards, compilers, operating systems, and hardware architectures.


            Regards,
            Stefan
            --
            Stefan Naewe stefan dot naewe at atlas-elektronik dot com
            Don't top-post http://www.catb.org/~esr/jargon/html/T/top-post.html
            Plain text mails only, please http://www.expita.com/nomime.html

            Comment

            Working...