Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C Programming (http://www.velocityreviews.com/forums/f42-c-programming.html)
-   -   Preprocessor includes, difference between quote and lt/gt (http://www.velocityreviews.com/forums/t445362-preprocessor-includes-difference-between-quote-and-lt-gt.html)

artifact.one@googlemail.com 11-30-2006 04:28 PM

Preprocessor includes, difference between quote and lt/gt
 
Hi.

What's the practical difference between:

#include <header.h>

and:

#include "header.h"

...besides the fact that in the second case, 'header.h' will be used if
it's
in the current working directory?

cheers,
MC


Richard Heathfield 11-30-2006 04:50 PM

Re: Preprocessor includes, difference between quote and lt/gt
 
artifact.one@googlemail.com said:

> Hi.
>
> What's the practical difference between:
>
> #include <header.h>
>
> and:
>
> #include "header.h"



3.1.7 of C89 says (in part): "The sequences in both forms of header names
are mapped in an implementation-defined manner to headers or external
source file names as specified in $3.8.2."

3.8.2 says (in part): " A preprocessing directive of the form

# include <h-char-sequence> new-line

searches a sequence of implementation-defined places for a header
identified uniquely by the specified sequence between the < and >
delimiters, and causes the replacement of that directive by the entire
contents of the header. How the places are specified or the header
identified is implementation-defined.

A preprocessing directive of the form

# include "q-char-sequence" new-line

causes the replacement of that directive by the entire contents of the
source file identified by the specified sequence between the
delimiters. The named source file is searched for in an
implementation-defined manner. If this search is not supported, or if
the search fails, the directive is reprocessed as if it read

# include <h-char-sequence> new-line

with the identical contained sequence (including > characters, if any)
from the original directive.


So the practical upshot is that C provides two different mechanisms for
finding a header: "header" and <header>. If you use "header", the
implementation uses a particular search strategy, which could of course
fail. If it does, the implementation pretends you'd used <header> instead,
which also uses a particular search strategy for locating the header. There
need not necessarily be any difference between the two strategies, but on
typical desktop systems there normally is. (I know of no typical desktop
exceptions, anyway.)


> ..besides the fact that in the second case, 'header.h' will be used if
> it's
> in the current working directory?


A mere implementation detail, of no particular significance in comp.lang.c -
the C language does not require implementations to support or even
recognise a concept of "directory", and some implementations do not in fact
recognise such a concept.

--
Richard Heathfield
"Usenet is a strange place" - dmr 29/7/1999
http://www.cpax.org.uk
email: rjh at the above domain, - www.

artifact.one@googlemail.com 11-30-2006 04:54 PM

Re: Preprocessor includes, difference between quote and lt/gt
 
Ok, thanks. That explains it well.

MC


CBFalconer 12-01-2006 02:33 AM

Re: Preprocessor includes, difference between quote and lt/gt
 
artifact.one@googlemail.com wrote:
>
> What's the practical difference between:
>
> #include <header.h>
> and:
> #include "header.h"
>
> ..besides the fact that in the second case, 'header.h' will be
> used if it's in the current working directory?


Not so. Look at your system documentation. Note that <header.h>
need not access any file whatsoever. What the standard says is
(N869):

[#2] A preprocessing directive of the form

# include <h-char-sequence> new-line

searches a sequence of implementation-defined places for a
header identified uniquely by the specified sequence between
the < and > delimiters, and causes the replacement of that
directive by the entire contents of the header. How the
places are specified or the header identified is
implementation-defined.

[#3] A preprocessing directive of the form

# include "q-char-sequence" new-line

causes the replacement of that directive by the entire
contents of the source file identified by the specified
sequence between the " delimiters. The named source file is
searched for in an implementation-defined manner. If this
search is not supported, or if the search fails, the
directive is reprocessed as if it read

# include <h-char-sequence> new-line

with the identical contained sequence (including >
characters, if any) from the original directive.

--
Chuck F (cbfalconer at maineline dot net)
Available for consulting/temporary embedded and systems.
<http://cbfalconer.home.att.net>




All times are GMT. The time now is 02:17 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.