#include with <> or "" ?

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

    #include with <> or "" ?

    I have a folder 'app' containing a file 'main.cpp' and a subfolder 'types'
    (containing various header files). In main.cpp some header files from the
    subdir 'types' are included like:

    1)
    #include<types/vector.h>
    #include<types/matrix.h>

    But I have to change them to

    2)
    #include "types/vector.h"
    #include "types/matrix.h"

    to make compilation work. I know that 1) worked earlier with the original
    makefile but I don't have that anymore. How is it possible to make the code
    compile with the version used in 1) again?

    I am currently working in MS Visual Studio 2008 and it seems that makefiles
    are generated automatically.


  • Jerry Coffin

    #2
    Re: #include with &lt;&gt; or &quot;&quot; ?

    In article <48931c71$0$902 71$14726298@new s.sunsite.dk>, asdff@asd.com
    says...
    I have a folder 'app' containing a file 'main.cpp' and a subfolder 'types'
    (containing various header files). In main.cpp some header files from the
    subdir 'types' are included like:
    >
    1)
    #include<types/vector.h>
    #include<types/matrix.h>
    >
    But I have to change them to
    >
    2)
    #include "types/vector.h"
    #include "types/matrix.h"
    >
    to make compilation work.
    This is what you almost certainly _should_ do. To make it work with the
    angle brackets, you have to lie to the compiler and tell it that the
    current diretory (i.e. the parent of your 'types' directory) contains
    "system" headers. That's typically done with the the '-I' compiler flag,
    though that varies and isn't really topical here anyway.

    --
    Later,
    Jerry.

    The universe is a figment of its own imagination.

    Comment

    • Victor Bazarov

      #3
      Re: #include with &lt;&gt; or &quot;&quot; ?

      saneman wrote:
      I have a folder 'app' containing a file 'main.cpp' and a subfolder 'types'
      (containing various header files). In main.cpp some header files from the
      subdir 'types' are included like:
      >
      1)
      #include<types/vector.h>
      #include<types/matrix.h>
      >
      But I have to change them to
      >
      2)
      #include "types/vector.h"
      #include "types/matrix.h"
      >
      to make compilation work. I know that 1) worked earlier with the original
      makefile but I don't have that anymore. How is it possible to make the code
      compile with the version used in 1) again?
      >
      I am currently working in MS Visual Studio 2008 and it seems that makefiles
      are generated automatically.
      The difference in processing of the angle-bracket type inclusion
      directives and the double-quote type is *implementation-defined*. It is
      not specified in the language Standard how those are different and what
      to do in the case like yours. Please post to the newsgroup that deals
      with your compiler. IIRC, VC++ looks in the project directory for the
      quoted type and in the "include" directories for the bracketed type, so
      you might need to add your current directory to the "list of include
      directories" (see /I compiler option).

      V
      --
      Please remove capital 'A's when replying by e-mail
      I do not respond to top-posted replies, please don't ask

      Comment

      • Greg Comeau

        #4
        Re: #include with &lt;&gt; or &quot;&quot; ?

        In article <48931c71$0$902 71$14726298@new s.sunsite.dk>,
        saneman <asdff@asd.comw rote:
        >I have a folder 'app' containing a file 'main.cpp' and a subfolder 'types'
        >(containing various header files). In main.cpp some header files from the
        >subdir 'types' are included like:
        >
        >1)
        >#include<typ es/vector.h>
        >#include<typ es/matrix.h>
        >
        >But I have to change them to
        >
        >2)
        >#include "types/vector.h"
        >#include "types/matrix.h"
        >
        >to make compilation work. I know that 1) worked earlier with the original
        >makefile but I don't have that anymore. How is it possible to make the code
        >compile with the version used in 1) again?
        >
        >I am currently working in MS Visual Studio 2008 and it seems that makefiles
        >are generated automatically.
        The intention of <is to search for "system header files"
        whereas the intention of "" is to search for "other headers".
        The problem is that a lot of this is left to the implementation
        and not dictated by the standard, and as such, it is not completely
        specified and the can even cross over to the other form
        (IOWs, putting a system header files within "" and as on).
        In short, it's left up to the implementation to document.
        So the answer to your question is compiler specific, however,
        that said, chances are good that you can getting it working with
        a -I option, though the argument is that you probably should
        prefer form (2).
        --
        Greg Comeau / 4.3.10.1 with C++0xisms now in beta!
        Comeau C/C++ ONLINE == http://www.comeaucomputing.com/tryitout
        World Class Compilers: Breathtaking C++, Amazing C99, Fabulous C90.
        Comeau C/C++ with Dinkumware's Libraries... Have you tried it?

        Comment

        • James Kanze

          #5
          Re: #include with &lt;&gt; or &quot;&quot; ?

          On Aug 1, 4:44 pm, Victor Bazarov <v.Abaza...@com Acast.netwrote:
          saneman wrote:
          I have a folder 'app' containing a file 'main.cpp' and a
          subfolder 'types' (containing various header files). In
          main.cpp some header files from the subdir 'types' are
          included like:
          1)
          #include<types/vector.h>
          #include<types/matrix.h>
          But I have to change them to
          2)
          #include "types/vector.h"
          #include "types/matrix.h"
          to make compilation work. I know that 1) worked earlier with
          the original makefile but I don't have that anymore. How is
          it possible to make the code compile with the version used
          in 1) again?
          I am currently working in MS Visual Studio 2008 and it seems
          that makefiles are generated automatically.
          The difference in processing of the angle-bracket type
          inclusion directives and the double-quote type is
          *implementation-defined*.
          In theory. In practice: includes in a <are searched first in
          a list of directories that you provide (via -I or /I options,
          depending on the compiler), then in some standard system places
          (where the compiler is installed, then /usr/include under most
          Unix; under Windows, at least with VC++, I think the contents of
          the environement variable INCLUDE). An include "" first
          searches in the directory where the file containing the include
          was situated, and then acts exactly like an include <>.

          Some compilers have additional options to modify this somewhat
          (e.g. adding a directory which is only used by include ""), but
          I've yet to find a compiler which didn't support the above.

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

          Working...