mirror of https://github.com/mkerrisk/man-pages
New page describing feature test macros.
This commit is contained in:
parent
fb961f311e
commit
55b726d1a1
|
@ -0,0 +1,145 @@
|
|||
.\" 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 FTM 7 2006-04-26 "Linux" "Linux Programmer's Manual"
|
||||
.SH NAME
|
||||
ftm \- 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_C_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 IOC 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.
|
||||
.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.
|
||||
.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.
|
||||
.SH "SEE ALSO"
|
Loading…
Reference in New Issue