blob: f26a160c62766ecb4b21fd592ae2d62e73f24527 [file] [log] [blame]
<html lang="en">
<head>
<title>Defined - The C Preprocessor</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="The C Preprocessor">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Conditional-Syntax.html#Conditional-Syntax" title="Conditional Syntax">
<link rel="prev" href="If.html#If" title="If">
<link rel="next" href="Else.html#Else" title="Else">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
Copyright (C) 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996,
1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
2008, 2009, 2010
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.2 or
any later version published by the Free Software Foundation. A copy of
the license is included in the
section entitled ``GNU Free Documentation License''.
This manual contains no Invariant Sections. The Front-Cover Texts are
(a) (see below), and the Back-Cover Texts are (b) (see below).
(a) The FSF's Front-Cover Text is:
A GNU Manual
(b) The FSF's Back-Cover Text is:
You have freedom to copy and modify this GNU Manual, like GNU
software. Copies published by the Free Software Foundation raise
funds for GNU development.
-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="Defined"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Else.html#Else">Else</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="If.html#If">If</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Conditional-Syntax.html#Conditional-Syntax">Conditional Syntax</a>
<hr>
</div>
<h4 class="subsection">4.2.3 Defined</h4>
<p><a name="index-g_t_0040code_007bdefined_007d-89"></a>The special operator <code>defined</code> is used in &lsquo;<samp><span class="samp">#if</span></samp>&rsquo; and
&lsquo;<samp><span class="samp">#elif</span></samp>&rsquo; expressions to test whether a certain name is defined as a
macro. <code>defined </code><var>name</var> and <code>defined (</code><var>name</var><code>)</code> are
both expressions whose value is 1 if <var>name</var> is defined as a macro at
the current point in the program, and 0 otherwise. Thus, <code>#if&nbsp;defined&nbsp;MACRO<!-- /@w --></code> is precisely equivalent to <code>#ifdef&nbsp;MACRO<!-- /@w --></code>.
<p><code>defined</code> is useful when you wish to test more than one macro for
existence at once. For example,
<pre class="smallexample"> #if defined (__vax__) || defined (__ns16000__)
</pre>
<p class="noindent">would succeed if either of the names <code>__vax__</code> or
<code>__ns16000__</code> is defined as a macro.
<p>Conditionals written like this:
<pre class="smallexample"> #if defined BUFSIZE &amp;&amp; BUFSIZE &gt;= 1024
</pre>
<p class="noindent">can generally be simplified to just <code>#if&nbsp;BUFSIZE&nbsp;&gt;=&nbsp;1024<!-- /@w --></code>,
since if <code>BUFSIZE</code> is not defined, it will be interpreted as having
the value zero.
<p>If the <code>defined</code> operator appears as a result of a macro expansion,
the C standard says the behavior is undefined. GNU cpp treats it as a
genuine <code>defined</code> operator and evaluates it normally. It will warn
wherever your code uses this feature if you use the command-line option
<samp><span class="option">-pedantic</span></samp>, since other compilers may handle it differently.
</body></html>