source: public/doc/gnu-c/Macros.html@ 02598c2

Last change on this file since 02598c2 was 02598c2, checked in by Mikhail Kirillov <w96k@…>, on Oct 6, 2022 at 12:36:29 PM

Add gnu-c

  • Property mode set to 100644
File size: 6.5 KB
Line 
1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2<html>
3<!-- Copyright (C) 2022 Richard Stallman and Free Software Foundation, Inc.
4
5(The work of Trevis Rothwell and Nelson Beebe has been assigned or
6licensed to the FSF.)
7
8Permission is granted to copy, distribute and/or modify this document
9under the terms of the GNU Free Documentation License, Version 1.3 or
10any later version published by the Free Software Foundation; with the
11Invariant Sections being "GNU General Public License," with the
12Front-Cover Texts being "A GNU Manual," and with the Back-Cover
13Texts as in (a) below. A copy of the license is included in the
14section entitled "GNU Free Documentation License."
15
16(a) The FSF's Back-Cover Text is: "You have the freedom to copy and
17modify this GNU manual. Buying copies from the FSF supports it in
18developing GNU and promoting software freedom." -->
19<!-- Created by GNU Texinfo 6.7, http://www.gnu.org/software/texinfo/ -->
20<head>
21<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
22<title>Macros (GNU C Language Manual)</title>
23
24<meta name="description" content="Macros (GNU C Language Manual)">
25<meta name="keywords" content="Macros (GNU C Language Manual)">
26<meta name="resource-type" content="document">
27<meta name="distribution" content="global">
28<meta name="Generator" content="makeinfo">
29<link href="index.html" rel="start" title="Top">
30<link href="Symbol-Index.html" rel="index" title="Symbol Index">
31<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
32<link href="Preprocessing.html" rel="up" title="Preprocessing">
33<link href="Object_002dlike-Macros.html" rel="next" title="Object-like Macros">
34<link href="Computed-Includes.html" rel="prev" title="Computed Includes">
35<style type="text/css">
36<!--
37a.summary-letter {text-decoration: none}
38blockquote.indentedblock {margin-right: 0em}
39div.display {margin-left: 3.2em}
40div.example {margin-left: 3.2em}
41div.lisp {margin-left: 3.2em}
42kbd {font-style: oblique}
43pre.display {font-family: inherit}
44pre.format {font-family: inherit}
45pre.menu-comment {font-family: serif}
46pre.menu-preformatted {font-family: serif}
47span.nolinebreak {white-space: nowrap}
48span.roman {font-family: initial; font-weight: normal}
49span.sansserif {font-family: sans-serif; font-weight: normal}
50ul.no-bullet {list-style: none}
51-->
52</style>
53
54
55</head>
56
57<body lang="en">
58<span id="Macros"></span><div class="header">
59<p>
60Next: <a href="Conditionals.html" accesskey="n" rel="next">Conditionals</a>, Previous: <a href="Header-Files.html" accesskey="p" rel="prev">Header Files</a>, Up: <a href="Preprocessing.html" accesskey="u" rel="up">Preprocessing</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Symbol-Index.html" title="Index" rel="index">Index</a>]</p>
61</div>
62<hr>
63<span id="Macros-1"></span><h3 class="section">26.5 Macros</h3>
64<span id="index-macros"></span>
65
66<p>A <em>macro</em> is a fragment of code that has been given a name.
67Whenever the name is used, it is replaced by the contents of the macro.
68There are two kinds of macros. They differ mostly in what they look
69like when they are used. <em>Object-like</em> macros resemble data objects
70when used, <em>function-like</em> macros resemble function calls.
71</p>
72<p>You may define any valid identifier as a macro, even if it is a C
73keyword. In the preprocessing stage, GCC does not know anything about
74keywords. This can be useful if you wish to hide a keyword such as
75<code>const</code> from an older compiler that does not understand it.
76However, the preprocessing operator <code>defined</code> (see <a href="defined.html">defined</a>)
77can never be defined as a macro, and C<code>++</code>&rsquo;s named operators
78(see <a href="https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Named-Operators.html#C_002b_002b-Named-Operators">C++ Named Operators</a> in <cite>Using the GNU Compiler Collection</cite>) cannot be macros when
79compiling C<code>++</code> code.
80</p>
81<p>The operator <code>#</code> is used in macros for stringification of an
82argument (see <a href="Stringification.html">Stringification</a>), and <code>##</code> is used for
83concatenation of arguments into larger tokens (see <a href="Concatenation.html">Concatenation</a>)
84</p>
85<table class="menu" border="0" cellspacing="0">
86<tr><td align="left" valign="top">&bull; <a href="Object_002dlike-Macros.html" accesskey="1">Object-like Macros</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
87</td></tr>
88<tr><td align="left" valign="top">&bull; <a href="Function_002dlike-Macros.html" accesskey="2">Function-like Macros</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
89</td></tr>
90<tr><td align="left" valign="top">&bull; <a href="Macro-Arguments.html" accesskey="3">Macro Arguments</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
91</td></tr>
92<tr><td align="left" valign="top">&bull; <a href="Stringification.html" accesskey="4">Stringification</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
93</td></tr>
94<tr><td align="left" valign="top">&bull; <a href="Concatenation.html" accesskey="5">Concatenation</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
95</td></tr>
96<tr><td align="left" valign="top">&bull; <a href="Variadic-Macros.html" accesskey="6">Variadic Macros</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
97</td></tr>
98<tr><td align="left" valign="top">&bull; <a href="Predefined-Macros.html" accesskey="7">Predefined Macros</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
99</td></tr>
100<tr><td align="left" valign="top">&bull; <a href="Undefining-and-Redefining-Macros.html" accesskey="8">Undefining and Redefining Macros</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
101</td></tr>
102<tr><td align="left" valign="top">&bull; <a href="Directives-Within-Macro-Arguments.html" accesskey="9">Directives Within Macro Arguments</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
103</td></tr>
104<tr><td align="left" valign="top">&bull; <a href="Macro-Pitfalls.html">Macro Pitfalls</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
105</td></tr>
106</table>
107
108<hr>
109<div class="header">
110<p>
111Next: <a href="Conditionals.html" accesskey="n" rel="next">Conditionals</a>, Previous: <a href="Header-Files.html" accesskey="p" rel="prev">Header Files</a>, Up: <a href="Preprocessing.html" accesskey="u" rel="up">Preprocessing</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Symbol-Index.html" title="Index" rel="index">Index</a>]</p>
112</div>
113
114
115
116</body>
117</html>
Note: See TracBrowser for help on using the repository browser.