Wednesday, November 4, 2009

#include directive








 

 




















#include directiveIncludes another source file


















#include <header>

#include "sourcefile"




The #include directive includes the contents of a

standard header or source file. The first form searches for

header and replaces the directive with the

entire contents of the header. The second form searches for

sourcefile and replaces the directive with

the entire contents of the named source file.



The basic action of #include is to read the named

file or header as though its entire contents appeared in the source

file at the position of the #include directive.

Typically, common declarations are placed in a separate file, such as

decl.h, and #include

"decl.h" is used in every source file that depends

on those declarations.





If a source file contains the directive #include

"filename",

and the compiler cannot find the external file named

filename, the compiler also tries the form

#include

<filename>.

Most compilers implement these two forms of

#include by searching in different folders or

directories. For example, the quote form searches in the current

directory or in the directory that contains the source file, and the

angle-bracket form searches only in

"system" directories. Such details

are implementation-defined, and some compilers might introduce

further distinctions between the two forms.



It is possible, for example, for a compiler to recognize only the

standard headers in the

<header>

form and use built-in knowledge of the standard headers without

referencing any external files. This hypothetical compiler might

report an error for all other uses of the angle-bracket form and

require all external file inclusions to use the quote form. Such a

compiler would not be very popular, however, because common practice

is to treat

<header>

and

"header"

as equivalent forms, except when applying the rules for locating the

external file named header.



It is common practice to install third-party libraries in common

directories and to configure compilers to look in these directories

for

<header>

inclusions. For example, if you use Boost (described in Appendix B), you might use #include

<any.hpp> to obtain the

boost::any class template. Another common practice

is to install such libraries in subdirectories. On a Unix system, for

example, you might install Boost in the boost

subdirectory of one of the standard system directories and use

#include <boost/any.hpp>.

You should be careful, however, because using system-specific

filenames is not

portable.



The only guarantee that the standard offers is that if

filename consists of a sequence of letters

and underscore characters followed by a period and a single letter or

underscore, then the implementation must provide a unique mapping of

filename to a source file (optionally

ignoring case distinctions). The standard permits universal

characters in filename, but you should

avoid them when you need maximum portability because some compilers

do not support universal characters.



The implementation defines how and where the preprocessor searches

for header or

filename, how

filename maps to an external filename,

whether filenames heed or ignore case distinctions, and whether

different character sequences for filename

represent distinct external files. For example, under Windows,

"foo.h" and

"FOO.H" are usually the same

file, but under Unix, they are usually different files. If the

filesystem supports links, such as Unix, two names such as

"foo.h" and "bar.h" might name

the same file; in other environments, you might be guaranteed that

different filenames refer to distinct files.



The most common convention is that

<header>

refers only to standard headers and to vendor-supplied extensions to

the standard. Compilers typically have a way for you to supply your

own additional libraries and use the associated headers as

<header>

includes. The quoted form is used for all header files that are part

of the application, and those are typically located in the same

directory or folder as the application's source

files. The most common filename convention is to end header names

with .h (for header), although

.hpp is also common. For example, suppose you

wrote a class to represent an employee. Put the class definition in

employee.h and the definitions of the members in

employee.cpp. Any other file that needs to use

the employee class can #include

"employee.h" and use the class definition:



#include <set>

#include "employee.h"



class business_group {

private:

std::set<employee> employees_;

...

};

You can use other preprocessor tokens in an

#include directive, provided they expand to one of

the two standard forms. Each header name or filename must be a single

preprocessor token; you cannot combine tokens to form a name. To

preserve portability, use macros only for the

entire sequence of the #include argument:



#define HEADER "this.h"

#include HEADER


See Also







#if directive
















     

     


    No comments:

    Post a Comment