source: public/doc/gnu-c/Ordering-of-Operands.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>Ordering of Operands (GNU C Language Manual)</title>
23
24<meta name="description" content="Ordering of Operands (GNU C Language Manual)">
25<meta name="keywords" content="Ordering of Operands (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="Optimization-and-Ordering.html" rel="next" title="Optimization and Ordering">
34<link href="Postincrement-and-Ordering.html" rel="prev" title="Postincrement 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="Ordering-of-Operands"></span><div class="header">
59<p>
60Next: <a href="Optimization-and-Ordering.html" accesskey="n" rel="next">Optimization and Ordering</a>, Previous: <a href="Postincrement-and-Ordering.html" accesskey="p" rel="prev">Postincrement 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="Ordering-of-Operands-1"></span><h3 class="section">10.5 Ordering of Operands</h3>
64<span id="index-ordering-of-operands-1"></span>
65<span id="index-operand-ordering"></span>
66
67<p>Operands and arguments can be computed in any order, but there are limits to
68this intermixing in GNU C:
69</p>
70<ul>
71<li> The operands of a binary arithmetic operator can be computed in either
72order, but they can&rsquo;t be intermixed: one of them has to come first,
73followed by the other. Any side effects in the operand that&rsquo;s computed
74first are executed before the other operand is computed.
75
76</li><li> That applies to assignment operators too, except that in simple assignment
77the previous value of the left operand is unused.
78
79</li><li> The arguments in a function call can be computed in any order, but
80they can&rsquo;t be intermixed. Thus, one argument is fully computed, then
81another, and so on until they are all done. Any side effects in one argument
82are executed before computation of another argument begins.
83</li></ul>
84
85<p>These rules don&rsquo;t cover side effects caused by postincrement and
86postdecrement operators&mdash;those can be deferred up to the next
87sequence point.
88</p>
89<p>If you want to get pedantic, the fact is that GCC can reorder the
90computations in many other ways provided that doesn&rsquo;t alter the result
91of running the program. However, because they don&rsquo;t alter the result
92of running the program, they are negligible, unless you are concerned
93with the values in certain variables at various times as seen by other
94processes. In those cases, you can use <code>volatile</code> to prevent
95optimizations that would make them behave strangely. See <a href="volatile.html">volatile</a>.
96</p>
97
98
99
100</body>
101</html>
Note: See TracBrowser for help on using the repository browser.