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
本文详细介绍了如何通过定义特定的预处理宏来控制GCC编译器的行为,这些宏可以指定源文件编译时所包含的标准库特性,包括ANSI C、POSIX、BSD Unix等不同标准的特性。
1760

被折叠的 条评论
为什么被折叠?



