• 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>Method signatures - 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="Type-encoding.html#Type-encoding" title="Type encoding">
9<link rel="prev" href="_0040_0040encode.html#g_t_0040_0040encode" title="@@encode">
10<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
11<!--
12Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
131998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
142010 Free Software Foundation, Inc.
15
16Permission is granted to copy, distribute and/or modify this document
17under the terms of the GNU Free Documentation License, Version 1.3 or
18any later version published by the Free Software Foundation; with the
19Invariant Sections being ``Funding Free Software'', the Front-Cover
20Texts being (a) (see below), and with the Back-Cover Texts being (b)
21(see below).  A copy of the license is included in the section entitled
22``GNU Free Documentation License''.
23
24(a) The FSF's Front-Cover Text is:
25
26     A GNU Manual
27
28(b) The FSF's Back-Cover Text is:
29
30     You have freedom to copy and modify this GNU Manual, like GNU
31     software.  Copies published by the Free Software Foundation raise
32     funds for GNU development.-->
33<meta http-equiv="Content-Style-Type" content="text/css">
34<style type="text/css"><!--
35  pre.display { font-family:inherit }
36  pre.format  { font-family:inherit }
37  pre.smalldisplay { font-family:inherit; font-size:smaller }
38  pre.smallformat  { font-family:inherit; font-size:smaller }
39  pre.smallexample { font-size:smaller }
40  pre.smalllisp    { font-size:smaller }
41  span.sc    { font-variant:small-caps }
42  span.roman { font-family:serif; font-weight:normal; } 
43  span.sansserif { font-family:sans-serif; font-weight:normal; } 
44--></style>
45<link rel="stylesheet" type="text/css" href="../cs.css">
46</head>
47<body>
48<div class="node">
49<a name="Method-signatures"></a>
50<p>
51Previous:&nbsp;<a rel="previous" accesskey="p" href="_0040encode.html#g_t_0040encode">@encode</a>,
52Up:&nbsp;<a rel="up" accesskey="u" href="Type-encoding.html#Type-encoding">Type encoding</a>
53<hr>
54</div>
55
56<h4 class="subsection">8.3.3 Method signatures</h4>
57
58<p>This section documents the encoding of method types, which is rarely
59needed to use Objective-C.  You should skip it at a first reading; the
60runtime provides functions that will work on methods and can walk
61through the list of parameters and interpret them for you.  These
62functions are part of the public &ldquo;API&rdquo; and are the preferred way to
63interact with method signatures from user code.
64
65 <p>But if you need to debug a problem with method signatures and need to
66know how they are implemented (i.e., the &ldquo;ABI&rdquo;), read on.
67
68 <p>Methods have their &ldquo;signature&rdquo; encoded and made available to the
69runtime.  The &ldquo;signature&rdquo; encodes all the information required to
70dynamically build invocations of the method at runtime: return type
71and arguments.
72
73 <p>The &ldquo;signature&rdquo; is a null-terminated string, composed of the following:
74
75     <ul>
76<li>The return type, including type qualifiers.  For example, a method
77returning <code>int</code> would have <code>i</code> here.
78
79     <li>The total size (in bytes) required to pass all the parameters.  This
80includes the two hidden parameters (the object <code>self</code> and the
81method selector <code>_cmd</code>).
82
83     <li>Each argument, with the type encoding, followed by the offset (in
84bytes) of the argument in the list of parameters.
85
86 </ul>
87
88 <p>For example, a method with no arguments and returning <code>int</code> would
89have the signature <code>i8@0:4</code> if the size of a pointer is 4.  The
90signature is interpreted as follows: the <code>i</code> is the return type
91(an <code>int</code>), the <code>8</code> is the total size of the parameters in
92bytes (two pointers each of size 4), the <code>@0</code> is the first
93parameter (an object at byte offset <code>0</code>) and <code>:4</code> is the
94second parameter (a <code>SEL</code> at byte offset <code>4</code>).
95
96 <p>You can easily find more examples by running the &ldquo;strings&rdquo; program
97on an Objective-C object file compiled by GCC.  You'll see a lot of
98strings that look very much like <code>i8@0:4</code>.  They are signatures
99of Objective-C methods.
100
101 </body></html>
102
103