source: public/doc/gnu-c/Logicals-and-Assignments.html@ 02598c2

Last change on this file since 02598c2 was 02598c2, checked in by Mikhail Kirillov <w96k@…>, on Oct 6, 2022 at 12:36:29 PM

Add gnu-c

  • Property mode set to 100644
File size: 4.7 KB
Line 
1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2<html>
3<!-- Copyright (C) 2022 Richard Stallman and Free Software Foundation, Inc.
4
5(The work of Trevis Rothwell and Nelson Beebe has been assigned or
6licensed to the FSF.)
7
8Permission is granted to copy, distribute and/or modify this document
9under the terms of the GNU Free Documentation License, Version 1.3 or
10any later version published by the Free Software Foundation; with the
11Invariant Sections being "GNU General Public License," with the
12Front-Cover Texts being "A GNU Manual," and with the Back-Cover
13Texts as in (a) below. A copy of the license is included in the
14section entitled "GNU Free Documentation License."
15
16(a) The FSF's Back-Cover Text is: "You have the freedom to copy and
17modify this GNU manual. Buying copies from the FSF supports it in
18developing GNU and promoting software freedom." -->
19<!-- Created by GNU Texinfo 6.7, http://www.gnu.org/software/texinfo/ -->
20<head>
21<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
22<title>Logicals and Assignments (GNU C Language Manual)</title>
23
24<meta name="description" content="Logicals and Assignments (GNU C Language Manual)">
25<meta name="keywords" content="Logicals and Assignments (GNU C Language Manual)">
26<meta name="resource-type" content="document">
27<meta name="distribution" content="global">
28<meta name="Generator" content="makeinfo">
29<link href="index.html" rel="start" title="Top">
30<link href="Symbol-Index.html" rel="index" title="Symbol Index">
31<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
32<link href="Execution-Control-Expressions.html" rel="up" title="Execution Control Expressions">
33<link href="Conditional-Expression.html" rel="next" title="Conditional Expression">
34<link href="Logicals-and-Comparison.html" rel="prev" title="Logicals and Comparison">
35<style type="text/css">
36<!--
37a.summary-letter {text-decoration: none}
38blockquote.indentedblock {margin-right: 0em}
39div.display {margin-left: 3.2em}
40div.example {margin-left: 3.2em}
41div.lisp {margin-left: 3.2em}
42kbd {font-style: oblique}
43pre.display {font-family: inherit}
44pre.format {font-family: inherit}
45pre.menu-comment {font-family: serif}
46pre.menu-preformatted {font-family: serif}
47span.nolinebreak {white-space: nowrap}
48span.roman {font-family: initial; font-weight: normal}
49span.sansserif {font-family: sans-serif; font-weight: normal}
50ul.no-bullet {list-style: none}
51-->
52</style>
53
54
55</head>
56
57<body lang="en">
58<span id="Logicals-and-Assignments"></span><div class="header">
59<p>
60Next: <a href="Conditional-Expression.html" accesskey="n" rel="next">Conditional Expression</a>, Previous: <a href="Logicals-and-Comparison.html" accesskey="p" rel="prev">Logicals and Comparison</a>, Up: <a href="Execution-Control-Expressions.html" accesskey="u" rel="up">Execution Control Expressions</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Symbol-Index.html" title="Index" rel="index">Index</a>]</p>
61</div>
62<hr>
63<span id="Logical-Operators-and-Assignments"></span><h3 class="section">8.3 Logical Operators and Assignments</h3>
64
65<p>There are cases where assignments nested inside the condition can
66actually make a program <em>easier</em> to read. Here is an example
67using a hypothetical type <code>list</code> which represents a list; it
68tests whether the list has at least two links, using hypothetical
69functions, <code>nonempty</code> which is true of the argument is a nonempty
70list, and <code>list_next</code> which advances from one list link to the
71next. We assume that a list is never a null pointer, so that the
72assignment expressions are always &ldquo;true.&rdquo;
73</p>
74<div class="example">
75<pre class="example">if (nonempty (list)
76 &amp;&amp; (temp1 = list_next (list))
77 &amp;&amp; nonempty (temp1)
78 &amp;&amp; (temp2 = list_next (temp1)))
79 <span class="roman">&hellip;</span> /* <span class="roman">use <code>temp1</code> and <code>temp2</code></span> */
80</pre></div>
81
82<p>Here we get the benefit of the &lsquo;<samp>&amp;&amp;</samp>&rsquo; operator, to avoid executing
83the rest of the code if a call to <code>nonempty</code> says &ldquo;false.&rdquo; The
84only natural place to put the assignments is among those calls.
85</p>
86<p>It would be possible to rewrite this as several statements, but that
87could make it much more cumbersome. On the other hand, when the test
88is even more complex than this one, splitting it into multiple
89statements might be necessary for clarity.
90</p>
91<p>If an empty list is a null pointer, we can dispense with calling
92<code>nonempty</code>:
93</p>
94<div class="example">
95<pre class="example">if ((temp1 = list_next (list))
96 &amp;&amp; (temp2 = list_next (temp1)))
97 <span class="roman">&hellip;</span>
98</pre></div>
99
100
101
102
103</body>
104</html>
Note: See TracBrowser for help on using the repository browser.