/usr/share/doc/fweb/html-info/Preprocessing.html is in fweb-doc 1.62-13.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Created by GNU Texinfo 6.1, http://www.gnu.org/software/texinfo/ -->
<head>
<title>FWEB: Preprocessing</title>
<meta name="description" content="FWEB: Preprocessing">
<meta name="keywords" content="FWEB: Preprocessing">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Concept-index.html#Concept-index" rel="index" title="Concept index">
<link href="Parameter-index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Macros.html#Macros" rel="up" title="Macros">
<link href="Languages.html#Languages" rel="next" title="Languages">
<link href="Macros-and-formatting.html#Macros-and-formatting" rel="prev" title="Macros and formatting">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.indentedblock {margin-right: 0em}
blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smalllisp {margin-left: 3.2em}
kbd {font-style: oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nolinebreak {white-space: nowrap}
span.roman {font-family: initial; font-weight: normal}
span.sansserif {font-family: sans-serif; font-weight: normal}
ul.no-bullet {list-style: none}
-->
</style>
</head>
<body lang="en">
<a name="Preprocessing"></a>
<div class="header">
<p>
Previous: <a href="Macros-and-formatting.html#Macros-and-formatting" accesskey="p" rel="prev">Macros and formatting</a>, Up: <a href="Macros.html#Macros" accesskey="u" rel="up">Macros</a> [<a href="Parameter-index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-index.html#Concept-index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Preprocessing-1"></a>
<h3 class="section">7.3 Preprocessing</h3>
<a name="index-Macros_002c-preprocessing"></a>
<a name="index-Preprocessing"></a>
<p>Generally, the <small>FWEB</small> preprocessor commands follow a syntax identical
to their C/C++ counterparts. The one exception is the ‘<samp>@#line</samp>’
command. Whereas the C command takes a line number and file name as
arguments, the <small>FWEB</small> command takes no arguments; its expansion
automatically inserts the current line number and file name. This
command should be necessary only in rare circumstances. One of those
involves situations in which an <small>FWEB</small> macro expands to more than one
output line; see <a href="Debugging-with-macros.html#Debugging-with-macros">Debugging with macros</a>.
</p>
<p>The <small>FWEB</small> preprocessor commands may appear in either the definition or the
code parts. But <em>BEWARE: No matter where they appear, they are expanded
during INPUT, not output.</em> (This is probably a design flaw.) For more
discussion, see <a href="FWEB-macros.html#FWEB-macros">FWEB macros</a>.
</p>
<a name="index-_0040_0023line"></a>
<a name="index-_0040_0023define"></a>
<a name="index-_0040_0023undef"></a>
<a name="index-_0040_0023ifdef"></a>
<a name="index-_0040_0023ifndef"></a>
<a name="index-_0040_0023if"></a>
<a name="index-_0040_0023elif"></a>
<a name="index-_0040_0023endif"></a>
<p>The syntax of each command is as follows:
</p>
<blockquote>
<dl compact="compact">
<dt><code>@#line</code></dt>
<dd><p>— Insert a <code>#line</code> command.
</p>
</dd>
<dt><code>@#define <var>identifier</var></code></dt>
<dd><p>— Define an FWEB macro; equivalent to ‘<samp>@m</samp>’.
</p></dd>
<dt><code>@#undef <var>identifier</var></code></dt>
<dd><p>— Undefine an FWEB macro.
</p>
</dd>
<dt><code>@#ifdef <var>identifier</var></code></dt>
<dd><p>— Is FWEB macro defined? Equivalent to ‘<samp>@#if defined identifier</samp>’<!-- /@w -->.
</p></dd>
<dt><code>@#ifndef <var>identifier</var></code></dt>
<dd><p>— Is FWEB macro not defined? Equivalent to ‘<samp>@#if !defined identifier</samp>’<!-- /@w -->.
</p>
</dd>
<dt><code>@#if <i>expression</i></code></dt>
<dt><code>@#elif <i>expression</i></code></dt>
<dt><code>@#else</code></dt>
<dt><code>@#endif</code></dt>
</dl>
</blockquote>
<p>In the ‘<samp>@#if</samp>’ statement, the <i>expression</i> may contain <small>FWEB</small>
macros, but must ultimately evaluate to a number. If that number is
zero, the expression is false; otherwise, it is true.
</p>
<a name="index-Expression-evaluation"></a>
<p>The <i>expression</i> following constructions such as ‘<samp>@#if</samp>’ is
evaluated by a built-in expression evaluator that can also be used for
other purposes, such as in macro expansion. Its behavior is again
motivated by expression
evaluation in ANSI C; it is not quite as general, but should be more than
adequate. (One design flaw that will be fixed someday is that the order
of expression evaluation is not necessarily left-to-right, as it is in C.)
It supports both integer and floating-point arithmetic (with type
promotion from integer to floating-point if necessary), and the ANSI
<code>defined</code> operator. Operators with the highest precedence
(see table below) are evaluated first; as usual, parentheses override the
natural order of evaluation. The unary operator <code>defined</code>
has the highest
precedence; all the other unary operators have the next highest (and equal)
precedence; then come the binary operators. When the operator exists in C,
the action taken by <small>FWEB</small> is precisely that that the C compiler would take.
Arithmetic is done in either <b>long</b> or <b>double</b> variables, as
implemented by the C compiler that compiled <small>FTANGLE</small>. (This was the
easy choice, not necessarily the most desirable one.)
</p>
<p>The operators, listed from highest precedence to lowest, are as
follows
</p>
<hr>
<div class="header">
<p>
Previous: <a href="Macros-and-formatting.html#Macros-and-formatting" accesskey="p" rel="prev">Macros and formatting</a>, Up: <a href="Macros.html#Macros" accesskey="u" rel="up">Macros</a> [<a href="Parameter-index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-index.html#Concept-index" title="Index" rel="index">Index</a>]</p>
</div>
</body>
</html>
|