• 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>Function Names - 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-Extensions.html#C-Extensions" title="C Extensions">
9<link rel="prev" href="Incomplete-Enums.html#Incomplete-Enums" title="Incomplete Enums">
10<link rel="next" href="Return-Address.html#Return-Address" title="Return Address">
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="Function-Names"></a>
51<p>
52Next:&nbsp;<a rel="next" accesskey="n" href="Return-Address.html#Return-Address">Return Address</a>,
53Previous:&nbsp;<a rel="previous" accesskey="p" href="Incomplete-Enums.html#Incomplete-Enums">Incomplete Enums</a>,
54Up:&nbsp;<a rel="up" accesskey="u" href="C-Extensions.html#C-Extensions">C Extensions</a>
55<hr>
56</div>
57
58<h3 class="section">6.47 Function Names as Strings</h3>
59
60<p><a name="index-g_t_0040code_007b_005f_005ffunc_005f_005f_007d-identifier-2699"></a><a name="index-g_t_0040code_007b_005f_005fFUNCTION_005f_005f_007d-identifier-2700"></a><a name="index-g_t_0040code_007b_005f_005fPRETTY_005fFUNCTION_005f_005f_007d-identifier-2701"></a>
61GCC provides three magic variables which hold the name of the current
62function, as a string.  The first of these is <code>__func__</code>, which
63is part of the C99 standard:
64
65 <p>The identifier <code>__func__</code> is implicitly declared by the translator
66as if, immediately following the opening brace of each function
67definition, the declaration
68
69<pre class="smallexample">     static const char __func__[] = "function-name";
70</pre>
71 <p class="noindent">appeared, where function-name is the name of the lexically-enclosing
72function.  This name is the unadorned name of the function.
73
74 <p><code>__FUNCTION__</code> is another name for <code>__func__</code>.  Older
75versions of GCC recognize only this name.  However, it is not
76standardized.  For maximum portability, we recommend you use
77<code>__func__</code>, but provide a fallback definition with the
78preprocessor:
79
80<pre class="smallexample">     #if __STDC_VERSION__ &lt; 199901L
81     # if __GNUC__ &gt;= 2
82     #  define __func__ __FUNCTION__
83     # else
84     #  define __func__ "&lt;unknown&gt;"
85     # endif
86     #endif
87</pre>
88 <p>In C, <code>__PRETTY_FUNCTION__</code> is yet another name for
89<code>__func__</code>.  However, in C++, <code>__PRETTY_FUNCTION__</code> contains
90the type signature of the function as well as its bare name.  For
91example, this program:
92
93<pre class="smallexample">     extern "C" {
94     extern int printf (char *, ...);
95     }
96     
97     class a {
98      public:
99       void sub (int i)
100         {
101           printf ("__FUNCTION__ = %s\n", __FUNCTION__);
102           printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
103         }
104     };
105     
106     int
107     main (void)
108     {
109       a ax;
110       ax.sub (0);
111       return 0;
112     }
113</pre>
114 <p class="noindent">gives this output:
115
116<pre class="smallexample">     __FUNCTION__ = sub
117     __PRETTY_FUNCTION__ = void a::sub(int)
118</pre>
119 <p>These identifiers are not preprocessor macros.  In GCC 3.3 and
120earlier, in C only, <code>__FUNCTION__</code> and <code>__PRETTY_FUNCTION__</code>
121were treated as string literals; they could be used to initialize
122<code>char</code> arrays, and they could be concatenated with other string
123literals.  GCC 3.4 and later treat them as variables, like
124<code>__func__</code>.  In C++, <code>__FUNCTION__</code> and
125<code>__PRETTY_FUNCTION__</code> have always been variables.
126
127 </body></html>
128
129