⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 creature.texi

📁 一个C源代码分析器
💻 TEXI
字号:
@node Feature Test Macros@subsection Feature Test Macros@cindex feature test macrosThe exact set of features available when you compile a source fileis controlled by which @dfn{feature test macros} you define.If you compile your programs using @samp{gcc -ansi}, you get only theANSI C library features, unless you explicitly request additionalfeatures by defining one or more of the feature macros.@xref{Invoking GCC,, GNU CC Command Options, gcc.info, The GNU CC Manual},for more information about GCC options.@refillYou should define these macros by using @samp{#define} preprocessordirectives at the top of your source code files.  These directives@emph{must} come before any @code{#include} of a system header file.  Itis best to make them the very first thing in the file, preceded only bycomments.  You could also use the @samp{-D} option to GCC, but it'sbetter if you make the source files indicate their own meaning in aself-contained way.@comment (none)@comment POSIX.1@defvr Macro _POSIX_SOURCEIf 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.@end defvr@comment (none)@comment POSIX.2@defvr Macro _POSIX_C_SOURCEIf you define this macro with a value of @code{1}, then thefunctionality from the POSIX.1 standard (IEEE Standard 1003.1) is madeavailable.  If you define this macro with a value of @code{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.@end defvr@comment (none)@comment GNU@defvr Macro _BSD_SOURCEIf 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.Due to the nature of some of the conflicts between 4.3 BSD and POSIX.1,you need to use a special @dfn{BSD compatibility library} when linkingprograms compiled for BSD compatibility.  This is because some functionsmust be defined in two different ways, one of them in the normal Clibrary, and one of them in the compatibility library.  If your programdefines @code{_BSD_SOURCE}, you must give the option @samp{-lbsd-compat}to the compiler or linker when linking the program, to tell it to findfunctions in this special compatibility library before looking for them inthe normal C library.@pindex -lbsd-compat@pindex bsd-compat@cindex BSD compatibility library.@end defvr@comment (none)@comment GNU@defvr Macro _SVID_SOURCEIf you define this macro, functionality derived from SVID isincluded as well as the ANSI C, POSIX.1, and POSIX.2 material.@end defvr@comment (none)@comment GNU@defvr Macro _GNU_SOURCEIf 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 @code{_GNU_SOURCE} but make theBSD definitions take precedence over the POSIX definitions, use thissequence of definitions:@smallexample#define _GNU_SOURCE#define _BSD_SOURCE#define _SVID_SOURCE@end smallexampleNote that if you do this, you must link your program with the BSDcompatibility library by passing the @samp{-lbsd-compat} option to thecompiler or linker.  @strong{Note:} If you forget to do this, you mayget very strange errors at run time.@end defvrWe recommend you use @code{_GNU_SOURCE} in new programs.  If you don'tspecify the @samp{-ansi} option to GCC and don't define any of these macrosexplicitly, the effect is the same as defining @code{_GNU_SOURCE}.When you define a feature test macro to request a larger class of features,it is harmless to define in addition a feature test macro for a subset ofthose features.  For example, if you define @code{_POSIX_C_SOURCE}, thendefining @code{_POSIX_SOURCE} as well has no effect.  Likewise, if youdefine @code{_GNU_SOURCE}, then defining either @code{_POSIX_SOURCE} or@code{_POSIX_C_SOURCE} or @code{_SVID_SOURCE} as well has no effect.Note, however, that the features of @code{_BSD_SOURCE} are not a subset ofany of the other feature test macros supported.  This is because it definesBSD features that take precedence over the POSIX features that arerequested by the other macros.  For this reason, defining@code{_BSD_SOURCE} in addition to the other feature test macros does havean effect: it causes the BSD features to take priority over the conflictingPOSIX features.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -