mirror of https://github.com/mkerrisk/man-pages
165 lines
5.7 KiB
Groff
165 lines
5.7 KiB
Groff
.\" Hey Emacs! This file is -*- nroff -*- source.
|
|
.\"
|
|
.\" This manpage is Copyright (C) 2006, Michael Kerrisk
|
|
.\"
|
|
.\" Permission is granted to make and distribute verbatim copies of this
|
|
.\" manual provided the copyright notice and this permission notice are
|
|
.\" preserved on all copies.
|
|
.\"
|
|
.\" Permission is granted to copy and distribute modified versions of this
|
|
.\" manual under the conditions for verbatim copying, provided that the
|
|
.\" entire resulting derived work is distributed under the terms of a
|
|
.\" permission notice identical to this one.
|
|
.\"
|
|
.\" Since the Linux kernel and libraries are constantly changing, this
|
|
.\" manual page may be incorrect or out-of-date. The author(s) assume no
|
|
.\" responsibility for errors or omissions, or for damages resulting from
|
|
.\" the use of the information contained herein. The author(s) may not
|
|
.\" have taken the same level of care in the production of this manual,
|
|
.\" which is licensed free of charge, as they might when working
|
|
.\" professionally.
|
|
.\"
|
|
.\" Formatted or processed versions of this manual, if unaccompanied by
|
|
.\" the source, must acknowledge the copyright and authors of this work.
|
|
.\"
|
|
.\"
|
|
.TH FEATURE_TEST_MACROS 7 2006-04-26 "Linux" "Linux Programmer's Manual"
|
|
.SH NAME
|
|
feature_test_macros \- feature test macros
|
|
.SH SYNOPSIS
|
|
.nf
|
|
.B #include <features.h>
|
|
.SH DESCRIPTION
|
|
Feature test macros allow the programmer to control the definitions that
|
|
are exposed by system header files when a program is compiled.
|
|
This can be useful for creating portable applications,
|
|
by preventing non-standard definitions from being exposed.
|
|
Other macros can be used to expose non-standard definitions that
|
|
are not exposed by default.
|
|
The precise effects of each of the feature test macros described below
|
|
can be ascertained by inspecting the
|
|
.I <features.h>
|
|
header file.
|
|
|
|
In order to be effective, a feature test macro
|
|
.IR "must be defined before including any header files" .
|
|
This can either be done in the compilation command
|
|
.RI ( "cc -DMACRO=value" )
|
|
or by defining the macro within the source code before
|
|
including any headers.
|
|
|
|
Linux/glibc understands the following feature test macros:
|
|
.TP
|
|
.B _POSIX_C_SOURCE
|
|
Defining this macro with the value 1 causes header files to expose
|
|
definitions conforming to POSIX.1-1990 and ISO C (1990).
|
|
Defining with the value 199309 or greater additionally exposes
|
|
definitions for POSIX.1b (real-time extensions).
|
|
Defining with the value 199506 or greater additionally exposes
|
|
definitions for POSIX.1c (threads).
|
|
Defining with the value 200112 exposes definitions corresponding
|
|
to the POSIX.1-2001 base specification (excluding the XSI extension).
|
|
.TP
|
|
.B _POSIX_SOURCE
|
|
Defining this obsolete macro with any value is equivalent to defining
|
|
.B _POSIX_C_SOURCE
|
|
with the value 1.
|
|
.TP
|
|
.B _XOPEN_SOURCE
|
|
Defining this macro with any value causes header files to expose
|
|
definitions conforming to POSIX.1, POSIX.2, and XPG4.
|
|
Defining with the value 500 or greater additionally exposes
|
|
definitions for SUSv2 (UNIX 98).
|
|
Defining with the value 600 or greater additionally exposes
|
|
definitions for SUSv3 (UNIX 03; i.e., the POSIX.1 base specification
|
|
plus the XSI extension) and C 99 definitions.
|
|
.TP
|
|
.B _XOPEN_SOURCE_EXTENDED
|
|
If this macro is defined with the value 1, and the
|
|
.BR _XOPEN_SOURCE
|
|
is defined, then expose definitions corresponding to the XPG4v2
|
|
UNIX extensions.
|
|
.TP
|
|
.B _ISOC99_SOURCE
|
|
Exposes C 99 extensions to ISO C (1990).
|
|
.TP
|
|
.B _LARGEFILE64_SOURCE
|
|
Expose definitions for the alternative API specified by the
|
|
LFS (Large File Summit) as a "transitional extension" the
|
|
Single UNIX Specification.
|
|
(See http://ftp.sas.com/standards/large.file/.)
|
|
.TP
|
|
.B _FILE_OFFSET_BITS
|
|
Defining this macro with the value 64
|
|
automatically converts references to 32-bit functions and data types
|
|
related to file I/O and file system operations into references to
|
|
their 64-bit counterparts.
|
|
This is useful for performing I/O on large files (> 2 Gigabytes)
|
|
on 32-bit systems.
|
|
.TP
|
|
.B _BSD_SOURCE
|
|
Defining this macro with any value cause header files to expose
|
|
BSD-derived definitions.
|
|
Defining this macro also causes BSD definitions to be preferred in
|
|
some situations where standards conflict.
|
|
.TP
|
|
.B _SVID_SOURCE
|
|
Defining this macro with any value cause header files to expose
|
|
System V-derived definitions.
|
|
(SVID == System V Interface Definition.)
|
|
.TP
|
|
.B _GNU_SOURCE
|
|
Defining this macro (with any value) is equivalent to defining
|
|
.BR _BSD_SOURCE ,
|
|
.BR _SVID_SOURCE ,
|
|
.BR _LARGEFILE64_SOURCE ,
|
|
.BR _ISOC99_SOURCE
|
|
.BR _POSIX_C_SOURCE
|
|
with the value 1999506,
|
|
and
|
|
.BR _XOPEN_SOURCE
|
|
with the value 600.
|
|
In addition, various GNU-specific extensions are also exposed.
|
|
.PP
|
|
When
|
|
.BR gcc (1)
|
|
is invoked, the following macros are defined by default:
|
|
.BR _BSD_SOURCE ,
|
|
.BR _SVID_SOURCE ,
|
|
.BR _POSIX_SOURCE ,
|
|
and
|
|
.BR POSIX_C_SOURCE =199506.
|
|
If individual macros are defined, then other macros are disabled
|
|
unless they are also explicitly defined. (Exception:
|
|
if
|
|
.BR POSIX_C_SOURCE
|
|
is not otherwise defined,
|
|
then it is always defined with the value 199506,
|
|
unless the compiler is invoked in one of its standard modes, e.g., the
|
|
.I -std=c99
|
|
flag.)
|
|
Multiple macros can be defined; the results are additive.
|
|
.SH CONFORMING TO
|
|
POSIX.1 specifies
|
|
.BR _POSIX_C_SOURCE ,
|
|
.BR _POSIX_SOURCE ,
|
|
and
|
|
.BR _XOPEN_SOURCE .
|
|
.BR _XOPEN_SOURCE_EXTENDED
|
|
was specified by XPG4v2 (aka SUSv1).
|
|
.BR _FILE_OFFSET_BITS
|
|
is not specified by any standard,
|
|
but is employed on some other implementations.
|
|
.BR _BSD_SOURCE ,
|
|
.BR _SVID_SOURCE ,
|
|
and
|
|
.BR _GNU_SOURCE
|
|
are Linux (glibc) specific.
|
|
.SH NOTES
|
|
.I <features.h>
|
|
is a Linux/glibc specific header file.
|
|
Other systems have an analogous file, but typically with a different name.
|
|
This header file is automatically included by other header files as
|
|
required: it is not necessary to explicitly include it in order to
|
|
employ feature test macros.
|