The exact set of features available when you compile a source fileis controlled by which feature test macros you define.
If you compile your programs using `gcc -ansi', you get onlythe ANSI C library features, unless you explicitly request additionalfeatures by defining one or more of the feature macros.See section 'Options' in The GNU CC Manual, for more informationabout GCC options.
You should define these macros by using `#define' preprocessordirectives at the top of your source code files. You could also use the `-D' option to GCC, but it's better if you make the sourcefiles indicate their own meaning in a self-contained way.
Macro: _POSIX_SOURCE
If you define this macro, then the functionality from the POSIX.1standard (IEEE Standard 1003.1) is available, as well as all of theANSI C facilities.
Macro: _POSIX_C_SOURCE
If you define this macro with a value of 1
, then thefunctionality from the POSIX.1 standard (IEEE Standard 1003.1) is madeavailable. If you define this macro with a value of 2
, then boththe functionality from the POSIX.1 standard and the functionality fromthe POSIX.2 standard (IEEE Standard 1003.2) are made available. This isin addition to the ANSI C facilities.
Macro: _BSD_SOURCE
If you define this macro, functionality derived from 4.3 BSD Unix isincluded as well as the ANSI C, POSIX.1, and POSIX.2 material.
Some of the features derived from 4.3 BSD Unix conflict with thecorresponding features specified by the POSIX.1 standard. If thismacro is defined, the 4.3 BSD definitions take precedence over thePOSIX definitions.
Macro: _SVID_SOURCE
If you define this macro, functionality derived from SVID isincluded as well as the ANSI C, POSIX.1, and POSIX.2 material.
Macro: _GNU_SOURCE
If you define this macro, everything is included: ANSI C, POSIX.1,POSIX.2, BSD, SVID, and GNU extensions. In the cases where POSIX.1conflicts with BSD, the POSIX definitions take precedence.
If you want to get the full effect of _GNU_SOURCE
but make theBSD definitions take precedence over the POSIX definitions, use thissequence of definitions:
#define _GNU_SOURCE #define _BSD_SOURCE #define _SVID_SOURCE
We recommend you use _GNU_SOURCE
in new programs.If you don't specify the `-ansi' option to GCC and don't defineany of these macros explicitly, the effect as the same as defining_GNU_SOURCE
.
When you define a feature test macro to request a larger class offeatures, it is harmless to define in addition a feature test macro fora subset of those features. For example, if you define_POSIX_C_SOURCE
, then defining _POSIX_SOURCE
as well hasno effect. Likewise, if you define _GNU_SOURCE
, then definingeither _POSIX_SOURCE
or _POSIX_C_SOURCE
or_SVID_SOURCE
as well has no effect.
Note, however, that the features of _BSD_SOURCE
are not a subsetof any of the other feature test macros supported. This is because itdefines BSD features that take precedence over the POSIX features thatare requested by the other macros. For this reason, defining_BSD_SOURCE
in addition to the other feature test macros doeshave an effect: it causes the BSD features to take priority over theconflicting POSIX features.
http://www.cs.utah.edu/dept/old/texinfo/glibc-manual-0.02/library_1.html