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: <a rel="next" accesskey="n" href="Return-Address.html#Return-Address">Return Address</a>, 53Previous: <a rel="previous" accesskey="p" href="Incomplete-Enums.html#Incomplete-Enums">Incomplete Enums</a>, 54Up: <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__ < 199901L 81 # if __GNUC__ >= 2 82 # define __func__ __FUNCTION__ 83 # else 84 # define __func__ "<unknown>" 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