source: public/doc/gnu-c/Sequence-Points.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.4 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>Sequence Points (GNU C Language Manual)</title>
23
24<meta name="description" content="Sequence Points (GNU C Language Manual)">
25<meta name="keywords" content="Sequence Points (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="Order-of-Execution.html" rel="up" title="Order of Execution">
33<link href="Postincrement-and-Ordering.html" rel="next" title="Postincrement and Ordering">
34<link href="Associativity-and-Ordering.html" rel="prev" title="Associativity and Ordering">
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="Sequence-Points"></span><div class="header">
59<p>
60Next: <a href="Postincrement-and-Ordering.html" accesskey="n" rel="next">Postincrement and Ordering</a>, Previous: <a href="Associativity-and-Ordering.html" accesskey="p" rel="prev">Associativity and Ordering</a>, Up: <a href="Order-of-Execution.html" accesskey="u" rel="up">Order of Execution</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="Sequence-Points-1"></span><h3 class="section">10.3 Sequence Points</h3>
64<span id="index-sequence-points"></span>
65<span id="index-full-expression"></span>
66
67<p>There are some points in the code where C makes limited guarantees
68about the order of operations. These are called <em>sequence
69points</em>. Here is where they occur:
70</p>
71<ul>
72<li> At the end of a <em>full expression</em>; that is to say, an expression
73that is not part of a larger expression. All side effects specified
74by that expression are carried out before execution moves
75on to subsequent code.
76
77</li><li> At the end of the first operand of certain operators: &lsquo;<samp>,</samp>&rsquo;,
78&lsquo;<samp>&amp;&amp;</samp>&rsquo;, &lsquo;<samp>||</samp>&rsquo;, and &lsquo;<samp>?:</samp>&rsquo;. All side effects specified by
79that expression are carried out before any execution of the
80next operand.
81
82<p>The commas that separate arguments in a function call are <em>not</em>
83comma operators, and they do not create sequence points. The rule
84for function arguments and the rule for operands are different
85(see <a href="Ordering-of-Operands.html">Ordering of Operands</a>).
86</p>
87</li><li> Just before calling a function. All side effects specified by the
88argument expressions are carried out before calling the function.
89
90<p>If the function to be called is not constant&mdash;that is, if it is
91computed by an expression&mdash;all side effects in that expression are
92carried out before calling the function.
93</p></li></ul>
94
95<p>The ordering imposed by a sequence point applies locally to a limited
96range of code, as stated above in each case. For instance, the
97ordering imposed by the comma operator does not apply to code outside
98that comma operator. Thus, in this code,
99</p>
100<div class="example">
101<pre class="example">(x = 5, foo (x)) + x * x
102</pre></div>
103
104<p>the sequence point of the comma operator orders <code>x = 5</code> before
105<code>foo (x)</code>, but <code>x * x</code> could be computed before or after
106them.
107</p>
108<hr>
109<div class="header">
110<p>
111Next: <a href="Postincrement-and-Ordering.html" accesskey="n" rel="next">Postincrement and Ordering</a>, Previous: <a href="Associativity-and-Ordering.html" accesskey="p" rel="prev">Associativity and Ordering</a>, Up: <a href="Order-of-Execution.html" accesskey="u" rel="up">Order of Execution</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>
112</div>
113
114
115
116</body>
117</html>
Note: See TracBrowser for help on using the repository browser.