By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,686 Members | 1,603 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,686 IT Pros & Developers. It's quick & easy.

Preprocessor includes, difference between quote and lt/gt

P: n/a
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

Nov 30 '06 #1
Share this Question
Share on Google+
3 Replies


P: n/a
ar**********@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 <headerinstead,
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.
Nov 30 '06 #2

P: n/a
Ok, thanks. That explains it well.

MC

Nov 30 '06 #3

P: n/a
ar**********@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-sequencenew-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-sequencenew-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>
Dec 1 '06 #4

This discussion thread is closed

Replies have been disabled for this discussion.