📄 autobook_228.html
字号:
<HTML><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><!-- Created on September, 12 2004 by texi2html 1.64 --><!-- Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author) Karl Berry <karl@freefriends.org> Olaf Bachmann <obachman@mathematik.uni-kl.de> and many others.Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>Send bugs and suggestions to <texi2html@mathematik.uni-kl.de> --><HEAD><TITLE>Autoconf, Automake, and Libtool: Naming macros</TITLE><META NAME="description" CONTENT="Autoconf, Automake, and Libtool: Naming macros"><META NAME="keywords" CONTENT="Autoconf, Automake, and Libtool: Naming macros"><META NAME="resource-type" CONTENT="document"><META NAME="distribution" CONTENT="global"><META NAME="Generator" CONTENT="texi2html 1.64"><script language="Javascript"><!-- // Check the browser version. function checkVersion() { if (navigator.appVersion.charAt(0)>=3) return true; if (navigator.appVersion.charAt(0)>=4) return true; else return false; } if (checkVersion()) { homeon = new Image(); homeon.src = "homeon.png"; homeoff = new Image(); homeoff.src = "home.png"; tocon = new Image(); tocon.src = "tocon.png"; tocoff = new Image(); tocoff.src = "toc.png"; indexon = new Image(); indexon.src = "indexon.png"; indexoff = new Image(); indexoff.src = "index.png"; helpon = new Image(); helpon.src = "helpon.png"; helpoff = new Image(); helpoff.src = "help.png"; backon = new Image(); backon.src = "backon.png"; backoff = new Image(); backoff.src = "back.png"; forwardon = new Image(); forwardon.src = "forwardon.png"; forwardoff = new Image(); forwardoff.src = "forward.png"; prevon = new Image(); prevon.src = "prevon.png"; prevoff = new Image(); prevoff.src = "prev.png"; nexton = new Image(); nexton.src = "nexton.png"; nextoff = new Image(); nextoff.src = "next.png"; upon = new Image(); upon.src = "upon.png"; upoff = new Image(); upoff.src = "up.png"; } function img_act(imgName) { if (checkVersion()) { imgOn = eval(imgName + "on.src"); document [imgName].src = imgOn; } } function img_inact(imgName) { if (checkVersion()) { imgOff = eval(imgName + "off.src"); document [imgName].src = imgOff; } }// --></SCRIPT></HEAD><BODY LANG="EN" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#6688AA" VLINK="#336688" ALINK="#808080"><A NAME="SEC228"></A><TABLE BORDER=0 CELLPADDING=0 CELLSPACING=10><TR VALIGN="TOP"><TD ALIGN="MIDDLE" WIDTH=50 BGCOLOR="#e6e6e6"><TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_227.html#SEC227" onMouseover="img_act('prev')" onMouseout="img_inact('prev')"><IMG SRC="prev.png" BORDER="0" ALT="Back: Output from macros" ALIGN="MIDDLE" NAME="prev"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_229.html#SEC229" onMouseover="img_act('next')" onMouseout="img_inact('next')"><IMG SRC="next.png" BORDER="0" ALT="Forward: Macro interface" ALIGN="MIDDLE" NAME="next"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"> <TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_229.html#SEC229" onMouseover="img_act('back')" onMouseout="img_inact('back')"><IMG SRC="back.png" BORDER="0" ALT="FastBack: Macro interface" ALIGN="MIDDLE" NAME="back"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_224.html#SEC224" onMouseover="img_act('up')" onMouseout="img_inact('up')"><IMG SRC="up.png" BORDER="0" ALT="Up: Guidelines for writing macros" ALIGN="MIDDLE" NAME="up"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_230.html#SEC230" onMouseover="img_act('forward')" onMouseout="img_inact('forward')"><IMG SRC="forward.png" BORDER="0" ALT="FastForward: Implementation specifics" ALIGN="MIDDLE" NAME="forward"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook.html#SEC_Top" onMouseover="img_act('home')" onMouseout="img_inact('home')"><IMG SRC="home.png" BORDER="0" ALT="Top: Autoconf, Automake, and Libtool" ALIGN="MIDDLE" NAME="home"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_toc.html#SEC_Contents" onMouseover="img_act('toc')" onMouseout="img_inact('toc')"><IMG SRC="toc.png" BORDER="0" ALT="Contents: Table of Contents" ALIGN="MIDDLE" NAME="toc"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_285.html#SEC285" onMouseover="img_act('index')" onMouseout="img_inact('index')"><IMG SRC="index.png" BORDER="0" ALT="Index: Index" ALIGN="MIDDLE" NAME="index"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_abt.html#SEC_About" onMouseover="img_act('help')" onMouseout="img_inact('help')"><IMG SRC="help.png" BORDER="0" ALT="About: About this document" ALIGN="MIDDLE" NAME="help"></A></TD></TR></TABLE></TD><TD ALIGN="LEFT"><H3> 23.3.4 Naming macros </H3><!--docid::SEC228::--><P>Just like functions in a C program, it's important to choose a good namefor your Autoconf macros. A well-chosen name helps to unambiguouslydescribe the purpose of the macro. Macros in M4 are all namedwithin a single namespace and, thus, it is necessary to follow aconvention to ensure that names retain uniqueness. This reasoning goesbeyond just avoiding collisions with other macros--if you happen tochoose a name that is already known to M4 as a definition of anykind, your macro's name could be rewritten by the prior definitionduring macro processing.</P><P>One naming convention has emerged--prefixing each macro name with thename of the package that the macro originated in or the initials of themacro's author. Macros are usually named in a hierarchical fashion,with each part of the name separated by underscores. As you moveleft-to-right through each component of the name, the descriptionbecomes more detailed. There are some high-level categories of macrossuggested by the Autoconf manual that you may wish to use when forming adescriptive name for your own macro. For example, if your macro triesto discover the existence of a particular C structure, you might wish touse <CODE>C</CODE> and <CODE>STRUCT</CODE> as components of its name.</P><P><DL COMPACT><DT><SAMP>`C'</SAMP><DD>Tests related to constructs of the C programming language.<DT><SAMP>`DECL'</SAMP><DD>Tests for variable declarations in header files.<DT><SAMP>`FUNC'</SAMP><DD>Tests for functions present in (or absent from) libraries.<DT><SAMP>`HEADER'</SAMP><DD>Tests for header files.<DT><SAMP>`LIB'</SAMP><DD>Tests for libraries.<DT><SAMP>`PATH'</SAMP><DD>Tests to discover absolute filenames (especially programs).<DT><SAMP>`PROG'</SAMP><DD>Tests to determine the base names of programs.<DT><SAMP>`STRUCT'</SAMP><DD>Tests for definitions of C structures in header files.<DT><SAMP>`SYS'</SAMP><DD>Tests for operating system features, such as restartable system calls.<DT><SAMP>`TYPE'</SAMP><DD>Tests for built-in or declared C data types.<DT><SAMP>`VAR'</SAMP><DD>Tests for C variables in libraries.</DL><P>Some examples of macro names formed in this way include:</P><P><DL COMPACT><DT><SAMP>`AC_PROG_CC'</SAMP><DD>A test that looks for a program called <CODE>cc</CODE>.<P><DT><SAMP>`AC_C_INLINE'</SAMP><DD>A test that discovers if the C keyword <CODE>inline</CODE> is recognized.<P><DT><SAMP>`bje_CXX_MUTABLE'</SAMP><DD>A test, written by "bje", that discovers if the C++ keyword<CODE>mutable</CODE> is recognized.</DL><P><A NAME="Macro interface"></A></TR></TABLE><BR> <FONT SIZE="-1">This document was generatedby <I>Gary V. Vaughan</I> on <I>September, 12 2004</I>using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html"><I>texi2html</I></A></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -