<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1992-2015 Free Software Foundation, Inc.
Contributed by Cygnus Support.  Written by Julia Menapace, Jim Kingdon,
and David MacKenzie.

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 no
Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
Texts.  A copy of the license is included in the section entitled "GNU
Free Documentation License". -->
<!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
<head>
<title>STABS: Macro define and undefine</title>

<meta name="description" content="STABS: Macro define and undefine">
<meta name="keywords" content="STABS: Macro define and undefine">
<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="Symbol-Types-Index.html#Symbol-Types-Index" rel="index" title="Symbol Types Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="index.html#Top" rel="up" title="Top">
<link href="Symbol-Tables.html#Symbol-Tables" rel="next" title="Symbol Tables">
<link href="Function-Types.html#Function-Types" rel="prev" title="Function Types">
<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="Macro-define-and-undefine"></a>
<div class="header">
<p>
Next: <a href="Symbol-Tables.html#Symbol-Tables" accesskey="n" rel="next">Symbol Tables</a>, Previous: <a href="Types.html#Types" accesskey="p" rel="prev">Types</a>, Up: <a href="index.html#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Symbol-Types-Index.html#Symbol-Types-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Representation-of-_0023define-and-_0023undef"></a>
<h2 class="chapter">6 Representation of #define and #undef</h2>

<p>This section describes the stabs support for macro define and undefine
information, supported on some systems.  (e.g., with <samp>-g3</samp>
<samp>-gstabs</samp> when using GCC).
</p>
<p>A <code>#define <var>macro-name</var> <var>macro-body</var></code> is represented with
an <code>N_MAC_DEFINE</code> stab with a string field of
<code><var>macro-name</var> <var>macro-body</var></code>.
<a name="index-N_005fMAC_005fDEFINE"></a>
</p>
<p>An <code>#undef <var>macro-name</var></code> is represented with an
<code>N_MAC_UNDEF</code> stabs with a string field of simply
<code><var>macro-name</var></code>.
<a name="index-N_005fMAC_005fUNDEF"></a>
</p>
<p>For both <code>N_MAC_DEFINE</code> and <code>N_MAC_UNDEF</code>, the desc field is
the line number within the file where the corresponding <code>#define</code>
or <code>#undef</code> occurred.
</p>
<p>For example, the following C code:
</p>
<div class="example">
<pre class="example">    #define NONE	42
    #define TWO(a, b)	(a + (a) + 2 * b)
    #define ONE(c)	(c + 19)

    main(int argc, char *argv[])
    {
      func(NONE, TWO(10, 11));
      func(NONE, ONE(23));

    #undef ONE
    #define ONE(c)	(c + 23)

      func(NONE, ONE(-23));

      return (0);
    }

    int global;

    func(int arg1, int arg2)
    {
      global = arg1 + arg2;
    }
</pre></div>

<p>produces the following stabs (as well as many others):
</p>
<div class="example">
<pre class="example">    .stabs	&quot;NONE 42&quot;,54,0,1,0
    .stabs	&quot;TWO(a,b) (a + (a) + 2 * b)&quot;,54,0,2,0
    .stabs	&quot;ONE(c) (c + 19)&quot;,54,0,3,0
    .stabs	&quot;ONE&quot;,58,0,10,0
    .stabs	&quot;ONE(c) (c + 23)&quot;,54,0,11,0
</pre></div>

<p>NOTE: In the above example, <code>54</code> is <code>N_MAC_DEFINE</code> and
<code>58</code> is <code>N_MAC_UNDEF</code>.
</p>



</body>
</html>
