source: public/doc/gnu-c/Conditional-Branches.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: 5.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>Conditional Branches (GNU C Language Manual)</title>
23
24<meta name="description" content="Conditional Branches (GNU C Language Manual)">
25<meta name="keywords" content="Conditional Branches (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="Conditional-Expression.html" rel="up" title="Conditional Expression">
33<link href="Comma-Operator.html" rel="next" title="Comma Operator">
34<link href="Conditional-Rules.html" rel="prev" title="Conditional Rules">
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="Conditional-Branches"></span><div class="header">
59<p>
60Previous: <a href="Conditional-Rules.html" accesskey="p" rel="prev">Conditional Rules</a>, Up: <a href="Conditional-Expression.html" accesskey="u" rel="up">Conditional Expression</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="Conditional-Operator-Branches"></span><h4 class="subsection">8.4.2 Conditional Operator Branches</h4>
64<span id="index-branches-of-conditional-expression"></span>
65
66<p>We call <var>iftrue</var> and <var>iffalse</var> the <em>branches</em> of the
67conditional.
68</p>
69<p>The two branches should normally have the same type, but a few
70exceptions are allowed. If they are both numeric types, the
71conditional converts both to their common type (see <a href="Common-Type.html">Common Type</a>).
72</p>
73<p>With pointers (see <a href="Pointers.html">Pointers</a>), the two values can be pointers to
74nearly compatible types (see <a href="Compatible-Types.html">Compatible Types</a>). In this case, the
75result type is a similar pointer whose target type combines all the
76type qualifiers (see <a href="Type-Qualifiers.html">Type Qualifiers</a>) of both branches.
77</p>
78<p>If one branch has type <code>void *</code> and the other is a pointer to an
79object (not to a function), the conditional converts the <code>void *</code>
80branch to the type of the other.
81</p>
82<p>If one branch is an integer constant with value zero and the other is
83a pointer, the conditional converts zero to the pointer&rsquo;s type.
84</p>
85<p>In GNU C, you can omit <var>iftrue</var> in a conditional expression. In
86that case, if <var>condition</var> is nonzero, its value becomes the value of
87the conditional expression, after conversion to the common type.
88Thus,
89</p>
90<div class="example">
91<pre class="example">x ? : y
92</pre></div>
93
94<p>has the value of <code>x</code> if that is nonzero; otherwise, the value of
95<code>y</code>.
96</p>
97<span id="index-side-effect-in-_003f_003a"></span>
98<span id="index-_003f_003a-side-effect"></span>
99<p>Omitting <var>iftrue</var> is useful when <var>condition</var> has side effects.
100In that case, writing that expression twice would carry out the side
101effects twice, but writing it once does them just once. For example,
102if we suppose that the function <code>next_element</code> advances a pointer
103variable to point to the next element in a list and returns the new
104pointer,
105</p>
106<div class="example">
107<pre class="example">next_element () ? : default_pointer
108</pre></div>
109
110<p>is a way to advance the pointer and use its new value if it isn&rsquo;t
111null, but use <code>default_pointer</code> if that is null. We must not do
112it this way,
113</p>
114<div class="example">
115<pre class="example">next_element () ? next_element () : default_pointer
116</pre></div>
117
118<p>because it would advance the pointer a second time.
119</p>
120<hr>
121<div class="header">
122<p>
123Previous: <a href="Conditional-Rules.html" accesskey="p" rel="prev">Conditional Rules</a>, Up: <a href="Conditional-Expression.html" accesskey="u" rel="up">Conditional Expression</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>
124</div>
125
126
127
128</body>
129</html>
Note: See TracBrowser for help on using the repository browser.