• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/toolchains/hndtools-armeabi-2011.09/share/doc/arm-arm-none-eabi/html/gcc/
1<html lang="en">
2<head>
3<title>Qualifiers implementation - Using the GNU Compiler Collection (GCC)</title>
4<meta http-equiv="Content-Type" content="text/html">
5<meta name="description" content="Using the GNU Compiler Collection (GCC)">
6<meta name="generator" content="makeinfo 4.13">
7<link title="Top" rel="start" href="index.html#Top">
8<link rel="up" href="C-Implementation.html#C-Implementation" title="C Implementation">
9<link rel="prev" href="Structures-unions-enumerations-and-bit_002dfields-implementation.html#Structures-unions-enumerations-and-bit_002dfields-implementation" title="Structures unions enumerations and bit-fields implementation">
10<link rel="next" href="Declarators-implementation.html#Declarators-implementation" title="Declarators implementation">
11<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
12<!--
13Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
141998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
152010 Free Software Foundation, Inc.
16
17Permission is granted to copy, distribute and/or modify this document
18under the terms of the GNU Free Documentation License, Version 1.3 or
19any later version published by the Free Software Foundation; with the
20Invariant Sections being ``Funding Free Software'', the Front-Cover
21Texts being (a) (see below), and with the Back-Cover Texts being (b)
22(see below).  A copy of the license is included in the section entitled
23``GNU Free Documentation License''.
24
25(a) The FSF's Front-Cover Text is:
26
27     A GNU Manual
28
29(b) The FSF's Back-Cover Text is:
30
31     You have freedom to copy and modify this GNU Manual, like GNU
32     software.  Copies published by the Free Software Foundation raise
33     funds for GNU development.-->
34<meta http-equiv="Content-Style-Type" content="text/css">
35<style type="text/css"><!--
36  pre.display { font-family:inherit }
37  pre.format  { font-family:inherit }
38  pre.smalldisplay { font-family:inherit; font-size:smaller }
39  pre.smallformat  { font-family:inherit; font-size:smaller }
40  pre.smallexample { font-size:smaller }
41  pre.smalllisp    { font-size:smaller }
42  span.sc    { font-variant:small-caps }
43  span.roman { font-family:serif; font-weight:normal; } 
44  span.sansserif { font-family:sans-serif; font-weight:normal; } 
45--></style>
46<link rel="stylesheet" type="text/css" href="../cs.css">
47</head>
48<body>
49<div class="node">
50<a name="Qualifiers-implementation"></a>
51<p>
52Next:&nbsp;<a rel="next" accesskey="n" href="Declarators-implementation.html#Declarators-implementation">Declarators implementation</a>,
53Previous:&nbsp;<a rel="previous" accesskey="p" href="Structures-unions-enumerations-and-bit_002dfields-implementation.html#Structures-unions-enumerations-and-bit_002dfields-implementation">Structures unions enumerations and bit-fields implementation</a>,
54Up:&nbsp;<a rel="up" accesskey="u" href="C-Implementation.html#C-Implementation">C Implementation</a>
55<hr>
56</div>
57
58<h3 class="section">4.10 Qualifiers</h3>
59
60     <ul>
61<li><cite>What constitutes an access to an object that has volatile-qualified
62type (C90 6.5.3, C99 6.7.3).</cite>
63
64     <p>Such an object is normally accessed by pointers and used for accessing
65hardware.  In most expressions, it is intuitively obvious what is a read
66and what is a write.  For example
67
68     <pre class="smallexample">          volatile int *dst = <var>somevalue</var>;
69          volatile int *src = <var>someothervalue</var>;
70          *dst = *src;
71</pre>
72     <p class="noindent">will cause a read of the volatile object pointed to by <var>src</var> and store the
73value into the volatile object pointed to by <var>dst</var>.  There is no
74guarantee that these reads and writes are atomic, especially for objects
75larger than <code>int</code>.
76
77     <p>However, if the volatile storage is not being modified, and the value of
78the volatile storage is not used, then the situation is less obvious. 
79For example
80
81     <pre class="smallexample">          volatile int *src = <var>somevalue</var>;
82          *src;
83</pre>
84     <p>According to the C standard, such an expression is an rvalue whose type
85is the unqualified version of its original type, i.e. <code>int</code>.  Whether
86GCC interprets this as a read of the volatile object being pointed to or
87only as a request to evaluate the expression for its side-effects depends
88on this type.
89
90     <p>If it is a scalar type, or on most targets an aggregate type whose only
91member object is of a scalar type, or a union type whose member objects
92are of scalar types, the expression is interpreted by GCC as a read of
93the volatile object; in the other cases, the expression is only evaluated
94for its side-effects.
95
96</ul>
97
98 </body></html>
99
100