Many
programming language
A programming language is a system of notation for writing computer programs. Most programming languages are text-based formal languages, but they may also be graphical. They are a kind of computer language.
The description of a programming l ...
s and other computer files have a
directive, often called
include
(sometimes
copy
or
import
), that causes the contents of the specified file to be inserted into the original file. These included files are called copybooks or s. There are over one thousand C library files and they are often used to define the physical layout of program data, pieces of procedural code, and/or
forward declarations while promoting
encapsulation and the reuse of code or data.
Header files
In
computer programming
Computer programming is the process of performing a particular computation (or more generally, accomplishing a specific computing result), usually by designing and building an executable computer program. Programming involves tasks such as anal ...
, a header file is a file that allows programmers to separate certain elements of a program's
source code
In computing, source code, or simply code, is any collection of code, with or without comment (computer programming), comments, written using a human-readable programming language, usually as plain text. The source code of a Computer program, p ...
into reusable files. Header files commonly contain
forward declarations of
classes,
subroutine
In computer programming, a function or subroutine is a sequence of program instructions that performs a specific task, packaged as a unit. This unit can then be used in programs wherever that particular task should be performed.
Functions ma ...
s,
variables, and other
identifier
An identifier is a name that identifies (that is, labels the identity of) either a unique object or a unique ''class'' of objects, where the "object" or class may be an idea, physical countable object (or class thereof), or physical noncountable ...
s. Programmers who wish to declare standardized identifiers in more than one source file can place such identifiers in a single header file, which other code can then include whenever the header contents are required. This is to keep the interface in the header separate from the
implementation.
The
C standard library and the
C++ standard library traditionally declare their standard functions in header files.
Some recently created compiled languages (such as
Java
Java (; id, Jawa, ; jv, ꦗꦮ; su, ) is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea to the north. With a population of 151.6 million people, Java is the world's mo ...
,
C#) do not use forward declarations; identifiers are recognized automatically from
source files and read directly from
dynamic library symbols. This means header files are not needed.
Purpose
The
include
directive allows
libraries of code to be developed which help to:
* ensure that everyone uses the same version of a data layout definition or procedural code throughout a program,
* easily cross-reference where components are used in a system,
* easily change programs when needed (only one file must be edited), and
* save time by reusing data layouts.
Example
An example situation which benefits from the use of an include directive is when referring to functions in a different file. Suppose there is some
C source file containing a function
add
, which is referred to in a second file by first declaring its external existence and type (with a
function prototype) as follows:
int add(int, int);
int triple(int x)
One drawback of this approach is that the function prototype must be present in all files that use the function. Another drawback is that if the return type or arguments of the function are changed, all of these prototypes would need to be updated. Putting the prototype in a single, separate file avoids these issues. Assuming the prototype is moved to the file
add.h
, the second source file can then become:
#include "add.h"
int triple(int x)
Now, every time the code is compiled, the latest function prototypes in
add.h
will be included in the files using them, avoiding potential errors.
Language support
C/C++
In the
C and
C++ programming languages, the
#include
preprocessor directive causes the
compiler
In computing, a compiler is a computer program that translates computer code written in one programming language (the ''source'' language) into another language (the ''target'' language). The name "compiler" is primarily used for programs that ...
to replace that line with the entire text of the contents of the named source file (if included in quotes: "") or named header (if included in angle brackets: <>); note that a header doesn't need to be a source file. Inclusion continues recursively on these included contents, up to an implementation-defined nesting limit. Headers need not have names corresponding to files: in C++ standard headers are typically identified with words, like "vector", hence
#include <vector>
, while in C standard headers have identifiers in the form of filenames with a ".h" extension, as in
#include <stdio.h>
. A "source file" can be any file, with a name of any form, but is most commonly named with a ".h" extension and called a "header file" (sometimes ".hpp" or ".hh" to distinguish C++ headers), though files with .c, .cc, and .cpp extensions may also be included (particularly in the
single compilation unit technique), and sometimes other extensions are used.
These two forms of
#include
directive can determine which header or source file to include in an implementation-defined way. In practice, what is usually done is that the angle-brackets form searches for ''source files'' in a standard system directory (or set of directories), and then searches for source files in local or project-specific paths (specified on the command line, in an environment variable, or in a
Makefile or other build file), while the form with quotes does not search in a standard system directory, only searching in local or project-specific paths. In case there is no clash, the angle-brackets form can also be used to specify project-specific includes, but this is considered poor form. The fact that headers need not correspond to files is primarily an implementation technicality, and is used to omit the .h extension in including C++ standard headers; in common use, "header" means "header file".
For example:
#include // Include the contents of the standard header 'stdio.h' (probably a file 'stdio.h').
#include // Include the contents of the standard header 'vector' (probably a file 'vector.h').
#include "user_defined.h" // Include the contents of the file 'user_defined.h'.
In C and C++, problems may be faced if two (or more) include files contain the same third file. One solution is to avoid include files from including any other files, possibly requiring the programmer to manually add extra include directives to the original file. Another solution is to use
include guards.
COBOL
COBOL (and also
RPG IV) allows programmers to copy copybooks into the source of the program in a similar way to header files, but it also allows for the replacement of certain text in them with other text. The COBOL keyword for inclusion is
COPY
, and replacement is done using the
REPLACING ... BY ...
clause. An include directive has been present in COBOL since COBOL 60, but changed from the original
INCLUDE
to
COPY
by 1968.
Fortran
Fortran does not require header files ''per se''. However, Fortran 90 and later have two related features:
include
statements and modules. The former can be used to share a common file containing procedure interfaces, much like a C header, although the specification of an interface is not required for all varieties of Fortran procedures. This approach is not commonly used; instead, procedures are generally grouped into modules that can then be referenced with a
use
statement within other regions of code. For modules, header-type interface information is automatically generated by the compiler and typically put into separate module files, although some compilers have placed this information directly into object files. The language specification itself does not mandate the creation of any extra files, even though module procedure interfaces are almost universally propagated in this manner.
Pascal
Most
Pascal compilers support the
$i
or
$include
compiler directive, in which the
$i
or
$include
directive immediately follows the start of a comment block in the form of
*
*
(*$I ''filename.inc''*)
*
*
(*INCLUDE ''filename.pas''*)
Where the
$i
or
$include
directive is not
case sensitive, and ''filename.pas'' or ''filename.inc'' is the name of the file to be included. (It has been common practice to name Pascal's include files with the
extension .inc, but this is not required.) Some compilers, to prevent
crock recursion, limit invoking an include file to a certain number, prohibit invoking itself or any currently open file, or are limited to a maximum of one include file at a time, e.g. an include file cannot include itself or another file. However, the program that includes other files can include several, just one at a time.
PHP
In
PHP
PHP is a General-purpose programming language, general-purpose scripting language geared toward web development. It was originally created by Danish-Canadian programmer Rasmus Lerdorf in 1993 and released in 1995. The PHP reference implementati ...
, the
include
directive causes another PHP file to be included and evaluated. Similar commands are
require
, which upon failure to include will produce a
fatal exception and halt the script,
and
include_once
and
require_once
, which prevent a file from being included or required again if it has already been included or required, avoiding the C's double inclusion problem.
Other languages
There are many forms of the include directive, such as:
*
include ...
(
Fortran,
MASM
The Microsoft Macro Assembler (MASM) is an x86 assembler that uses the Intel syntax for MS-DOS and Microsoft Windows. Beginning with MASM 8.0, there are two versions of the assembler: One for 16-bit & 32-bit assembly sources, and another (ML64 ...
)
*
<!--#include ... -->
(HTML
SSI)
*
import ...;
(
Java
Java (; id, Jawa, ; jv, ꦗꦮ; su, ) is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea to the north. With a population of 151.6 million people, Java is the world's mo ...
)
*
import ... from ...
(
JavaScript
JavaScript (), often abbreviated as JS, is a programming language that is one of the core technologies of the World Wide Web, alongside HTML and CSS. As of 2022, 98% of Website, websites use JavaScript on the Client (computing), client side ...
as in
ECMAScript)
*
var ... = require("...")
(JavaScript with
CommonJS)
*
<%@ include ... %>
(
JSP)
*
(
UCSD Pascal,
Turbo Pascal
Turbo Pascal is a software development system that includes a compiler and an integrated development environment (IDE) for the Pascal programming language running on CP/M, CP/M-86, and DOS. It was originally developed by Anders Hejlsberg at ...
)
*
%include ...
(
PL/I
PL/I (Programming Language One, pronounced and sometimes written PL/1) is a procedural, imperative computer programming language developed and published by IBM. It is designed for scientific, engineering, business and system programming. It ...
)
*
import ...
(
Python)
*
/COPY ''QCPYLESRC'',''QBC''
(RPG IV – first argument is the filename, second argument is the copybook)
*
use ...;
(
Rust)
*
using ...;
(
C#)
*
local ... = require("...")
(
Lua
Lua or LUA may refer to:
Science and technology
* Lua (programming language)
* Latvia University of Agriculture
* Last universal ancestor, in evolution
Ethnicity and language
* Lua people, of Laos
* Lawa people, of Thailand sometimes referred t ...
)
*
import ...;
(
D)
Modern languages (e.g.
Haskell and
Java
Java (; id, Jawa, ; jv, ꦗꦮ; su, ) is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea to the north. With a population of 151.6 million people, Java is the world's mo ...
) tend to avoid copybooks or includes, preferring
modules and import/export systems for
namespace control. Some of these languages (such as Java and
C#) do not use forward declarations and, instead, identifiers are recognized automatically from
source files and read directly from
dynamic library symbols (typically referenced with
import
or
using
directives), meaning header files are not needed.
See also
*
Application programming interface (API)
*
Subroutine
In computer programming, a function or subroutine is a sequence of program instructions that performs a specific task, packaged as a unit. This unit can then be used in programs wherever that particular task should be performed.
Functions ma ...
*
Modular programming
*
#pragma once
*
Header-only
*
Unity build
*
Dot (command)
In a Unix shell, the full stop called the dot command (.) is a command that evaluates commands in a computer file in the current execution context. In C Shell, a similar functionality is provided as the source command, and this name is seen in "ext ...
*
Transclusion
*
File inclusion vulnerability
*
One Definition Rule (ODR)
*
Interface Definition Language (IDL)
*
Class implementation file
References
External links
Organizing Code Files (the potential pitfalls and guidelines for using header files in C++)
{{DEFAULTSORT:Include Directive
Programming constructs
Source code
C (programming language)
C++
fr:Bibliothèque standard du C#Les en-têtes de la bibliothèque C ISO