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: <a rel="next" accesskey="n" href="Declarators-implementation.html#Declarators-implementation">Declarators implementation</a>, 53Previous: <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: <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