diff options
Diffstat (limited to 'share/doc/gdb/C-Operators.html')
-rw-r--r-- | share/doc/gdb/C-Operators.html | 256 |
1 files changed, 256 insertions, 0 deletions
diff --git a/share/doc/gdb/C-Operators.html b/share/doc/gdb/C-Operators.html new file mode 100644 index 0000000..eec247b --- /dev/null +++ b/share/doc/gdb/C-Operators.html @@ -0,0 +1,256 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<!-- Copyright (C) 1988-2023 Free Software Foundation, Inc. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with the +Invariant Sections being "Free Software" and "Free Software Needs +Free Documentation", with the Front-Cover Texts being "A GNU Manual," +and with the Back-Cover Texts as in (a) below. + +(a) The FSF's Back-Cover Text is: "You are free to copy and modify +this GNU Manual. Buying copies from GNU Press supports the FSF in +developing GNU and promoting software freedom." --> +<!-- Created by GNU Texinfo 5.1, http://www.gnu.org/software/texinfo/ --> +<head> +<title>Debugging with GDB: C Operators</title> + +<meta name="description" content="Debugging with GDB: C Operators"> +<meta name="keywords" content="Debugging with GDB: C Operators"> +<meta name="resource-type" content="document"> +<meta name="distribution" content="global"> +<meta name="Generator" content="makeinfo"> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> +<link href="index.html#Top" rel="start" title="Top"> +<link href="Concept-Index.html#Concept-Index" rel="index" title="Concept Index"> +<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents"> +<link href="C.html#C" rel="up" title="C"> +<link href="C-Constants.html#C-Constants" rel="next" title="C Constants"> +<link href="C.html#C" rel="previous" title="C"> +<style type="text/css"> +<!-- +a.summary-letter {text-decoration: none} +blockquote.smallquotation {font-size: smaller} +div.display {margin-left: 3.2em} +div.example {margin-left: 3.2em} +div.indentedblock {margin-left: 3.2em} +div.lisp {margin-left: 3.2em} +div.smalldisplay {margin-left: 3.2em} +div.smallexample {margin-left: 3.2em} +div.smallindentedblock {margin-left: 3.2em; font-size: smaller} +div.smalllisp {margin-left: 3.2em} +kbd {font-style:oblique} +pre.display {font-family: inherit} +pre.format {font-family: inherit} +pre.menu-comment {font-family: serif} +pre.menu-preformatted {font-family: serif} +pre.smalldisplay {font-family: inherit; font-size: smaller} +pre.smallexample {font-size: smaller} +pre.smallformat {font-family: inherit; font-size: smaller} +pre.smalllisp {font-size: smaller} +span.nocodebreak {white-space:nowrap} +span.nolinebreak {white-space:nowrap} +span.roman {font-family:serif; font-weight:normal} +span.sansserif {font-family:sans-serif; font-weight:normal} +ul.no-bullet {list-style: none} +--> +</style> + + +</head> + +<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000"> +<a name="C-Operators"></a> +<div class="header"> +<p> +Next: <a href="C-Constants.html#C-Constants" accesskey="n" rel="next">C Constants</a>, Up: <a href="C.html#C" accesskey="u" rel="up">C</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p> +</div> +<hr> +<a name="C-and-C_002b_002b-Operators"></a> +<h4 class="subsubsection">15.4.1.1 C and C<tt>++</tt> Operators</h4> + +<a name="index-C-and-C_002b_002b-operators"></a> + +<p>Operators must be defined on values of specific types. For instance, +<code>+</code> is defined on numbers, but not on structures. Operators are +often defined on groups of types. +</p> +<p>For the purposes of C and C<tt>++</tt>, the following definitions hold: +</p> +<ul> +<li> <em>Integral types</em> include <code>int</code> with any of its storage-class +specifiers; <code>char</code>; <code>enum</code>; and, for C<tt>++</tt>, <code>bool</code>. + +</li><li> <em>Floating-point types</em> include <code>float</code>, <code>double</code>, and +<code>long double</code> (if supported by the target platform). + +</li><li> <em>Pointer types</em> include all types defined as <code>(<var>type</var> *)</code>. + +</li><li> <em>Scalar types</em> include all of the above. + +</li></ul> + +<p>The following operators are supported. They are listed here +in order of increasing precedence: +</p> +<dl compact="compact"> +<dt><code>,</code></dt> +<dd><p>The comma or sequencing operator. Expressions in a comma-separated list +are evaluated from left to right, with the result of the entire +expression being the last expression evaluated. +</p> +</dd> +<dt><code>=</code></dt> +<dd><p>Assignment. The value of an assignment expression is the value +assigned. Defined on scalar types. +</p> +</dd> +<dt><code><var>op</var>=</code></dt> +<dd><p>Used in an expression of the form <code><var>a</var> <var>op</var>= <var>b</var></code><!-- /@w -->, +and translated to <code><var>a</var> = <var>a op b</var></code><!-- /@w -->. +<code><var>op</var>=</code><!-- /@w --> and <code>=</code> have the same precedence. The operator +<var>op</var> is any one of the operators <code>|</code>, <code>^</code>, <code>&</code>, +<code><<</code>, <code>>></code>, <code>+</code>, <code>-</code>, <code>*</code>, <code>/</code>, <code>%</code>. +</p> +</dd> +<dt><code>?:</code></dt> +<dd><p>The ternary operator. <code><var>a</var> ? <var>b</var> : <var>c</var></code> can be thought +of as: if <var>a</var> then <var>b</var> else <var>c</var>. The argument <var>a</var> +should be of an integral type. +</p> +</dd> +<dt><code>||</code></dt> +<dd><p>Logical <small>OR</small>. Defined on integral types. +</p> +</dd> +<dt><code>&&</code></dt> +<dd><p>Logical <small>AND</small>. Defined on integral types. +</p> +</dd> +<dt><code>|</code></dt> +<dd><p>Bitwise <small>OR</small>. Defined on integral types. +</p> +</dd> +<dt><code>^</code></dt> +<dd><p>Bitwise exclusive-<small>OR</small>. Defined on integral types. +</p> +</dd> +<dt><code>&</code></dt> +<dd><p>Bitwise <small>AND</small>. Defined on integral types. +</p> +</dd> +<dt><code>==<span class="roman">, </span>!=</code></dt> +<dd><p>Equality and inequality. Defined on scalar types. The value of these +expressions is 0 for false and non-zero for true. +</p> +</dd> +<dt><code><<span class="roman">, </span>><span class="roman">, </span><=<span class="roman">, </span>>=</code></dt> +<dd><p>Less than, greater than, less than or equal, greater than or equal. +Defined on scalar types. The value of these expressions is 0 for false +and non-zero for true. +</p> +</dd> +<dt><code><<<span class="roman">, </span>>></code></dt> +<dd><p>left shift, and right shift. Defined on integral types. +</p> +</dd> +<dt><code>@</code></dt> +<dd><p>The <small>GDB</small> “artificial array” operator (see <a href="Expressions.html#Expressions">Expressions</a>). +</p> +</dd> +<dt><code>+<span class="roman">, </span>-</code></dt> +<dd><p>Addition and subtraction. Defined on integral types, floating-point types and +pointer types. +</p> +</dd> +<dt><code>*<span class="roman">, </span>/<span class="roman">, </span>%</code></dt> +<dd><p>Multiplication, division, and modulus. Multiplication and division are +defined on integral and floating-point types. Modulus is defined on +integral types. +</p> +</dd> +<dt><code>++<span class="roman">, </span>--</code></dt> +<dd><p>Increment and decrement. When appearing before a variable, the +operation is performed before the variable is used in an expression; +when appearing after it, the variable’s value is used before the +operation takes place. +</p> +</dd> +<dt><code>*</code></dt> +<dd><p>Pointer dereferencing. Defined on pointer types. Same precedence as +<code>++</code>. +</p> +</dd> +<dt><code>&</code></dt> +<dd><p>Address operator. Defined on variables. Same precedence as <code>++</code>. +</p> +<p>For debugging C<tt>++</tt>, <small>GDB</small> implements a use of ‘<samp>&</samp>’ beyond what is +allowed in the C<tt>++</tt> language itself: you can use ‘<samp>&(&<var>ref</var>)</samp>’ +to examine the address +where a C<tt>++</tt> reference variable (declared with ‘<samp>&<var>ref</var></samp>’) is +stored. +</p> +</dd> +<dt><code>-</code></dt> +<dd><p>Negative. Defined on integral and floating-point types. Same +precedence as <code>++</code>. +</p> +</dd> +<dt><code>!</code></dt> +<dd><p>Logical negation. Defined on integral types. Same precedence as +<code>++</code>. +</p> +</dd> +<dt><code>~</code></dt> +<dd><p>Bitwise complement operator. Defined on integral types. Same precedence as +<code>++</code>. +</p> + +</dd> +<dt><code>.<span class="roman">, </span>-></code></dt> +<dd><p>Structure member, and pointer-to-structure member. For convenience, +<small>GDB</small> regards the two as equivalent, choosing whether to dereference a +pointer based on the stored type information. +Defined on <code>struct</code> and <code>union</code> data. +</p> +</dd> +<dt><code>.*<span class="roman">, </span>->*</code></dt> +<dd><p>Dereferences of pointers to members. +</p> +</dd> +<dt><code>[]</code></dt> +<dd><p>Array indexing. <code><var>a</var>[<var>i</var>]</code> is defined as +<code>*(<var>a</var>+<var>i</var>)</code>. Same precedence as <code>-></code>. +</p> +</dd> +<dt><code>()</code></dt> +<dd><p>Function parameter list. Same precedence as <code>-></code>. +</p> +</dd> +<dt><code>::</code></dt> +<dd><p>C<tt>++</tt> scope resolution operator. Defined on <code>struct</code>, <code>union</code>, +and <code>class</code> types. +</p> +</dd> +<dt><code>::</code></dt> +<dd><p>Doubled colons also represent the <small>GDB</small> scope operator +(see <a href="Expressions.html#Expressions">Expressions</a>). Same precedence as <code>::</code>, +above. +</p></dd> +</dl> + +<p>If an operator is redefined in the user code, <small>GDB</small> usually +attempts to invoke the redefined version instead of using the operator’s +predefined meaning. +</p> +<hr> +<div class="header"> +<p> +Next: <a href="C-Constants.html#C-Constants" accesskey="n" rel="next">C Constants</a>, Up: <a href="C.html#C" accesskey="u" rel="up">C</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p> +</div> + + + +</body> +</html> |