Viewing File: /usr/share/doc/texinfo/html/Typed-Functions.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- This manual is for GNU Texinfo (version 6.7, 23 September 2019),
a documentation system that can produce both online information and a
printed manual from a single source using semantic markup.

Copyright (C) 1988, 1990, 1991, 1992, 1993, 1995, 1996, 1997,
1998, 1999, 2001, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 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.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 6.7, http://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Typed Functions (GNU Texinfo 6.7)</title>

<meta name="description" content="Typed Functions (GNU Texinfo 6.7)">
<meta name="keywords" content="Typed Functions (GNU Texinfo 6.7)">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="texi2any">
<link href="index.html" rel="start" title="Top">
<link href="Command-and-Variable-Index.html" rel="index" title="Command and Variable Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Def-Cmds-in-Detail.html" rel="up" title="Def Cmds in Detail">
<link href="Typed-Variables.html" rel="next" title="Typed Variables">
<link href="Variables-Commands.html" rel="prev" title="Variables Commands">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.indentedblock {margin-right: 0em}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.lisp {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}
span.nolinebreak {white-space: nowrap}
span.roman {font-family: initial; font-weight: normal}
span.sansserif {font-family: sans-serif; font-weight: normal}
ul.no-bullet {list-style: none}
-->
</style>


</head>

<body lang="en">
<span id="Typed-Functions"></span><div class="header">
<p>
Next: <a href="Typed-Variables.html" accesskey="n" rel="next">Typed Variables</a>, Previous: <a href="Variables-Commands.html" accesskey="p" rel="prev">Variables Commands</a>, Up: <a href="Def-Cmds-in-Detail.html" accesskey="u" rel="up">Def Cmds in Detail</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Command-and-Variable-Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<span id="Functions-in-Typed-Languages"></span><h4 class="subsection">14.5.3 Functions in Typed Languages</h4>

<span id="index-Typed-functions"></span>
<span id="index-Functions_002c-in-typed-languages"></span>

<p>The <code>@deftypefn</code> command and its variations are for describing
functions in languages in which you must declare types of variables
and functions, such as C and C++.
</p>
<dl compact="compact">
<dd><span id="index-deftypefn"></span>
</dd>
<dt><code>@deftypefn <var>category</var> <var>data-type</var> <var>name</var> <var>arguments</var>&hellip;</code></dt>
<dd><p>The <code>@deftypefn</code> command is the general definition command for
functions and similar entities that may take arguments and that are
typed.  The <code>@deftypefn</code> command is written at the beginning of
a line and is followed on the same line by the category of entity
being described, the type of the returned value, the name of this
particular entity, and its arguments, if any.
</p>
<p>For example,
</p>
<div class="example">
<pre class="example">@deftypefn {Library Function} int foobar @
  (int @var{foo}, float @var{bar})
&hellip;
@end deftypefn
</pre></div>

<p>produces:
</p>
<blockquote>
<dl>
<dt id="index-foobar-1">Library Function: <em>int</em> <strong>foobar</strong> <em>(int <var>foo</var>, float <var>bar</var>)</em></dt>
<dd><p>&hellip;
</p></dd></dl>
</blockquote>

<p>This means that <code>foobar</code> is a &ldquo;library function&rdquo; that returns an
<code>int</code>, and its arguments are <var>foo</var> (an <code>int</code>) and
<var>bar</var> (a <code>float</code>).
</p>
<p>Since in typed languages, the actual names of the arguments are
typically scattered among data type names and keywords, Texinfo cannot
find them without help.  You can either (a)&nbsp;write everything as
straight text, and it will be printed in slanted type; (b)&nbsp;use
<code>@var</code> for the variable names, which will uppercase the variable
names in Info and use the slanted typewriter font in printed output;
(c)&nbsp;use <code>@var</code> for the variable names and <code>@code</code> for
the type names and keywords, which will be dutifully obeyed.
</p>
<p>The template for <code>@deftypefn</code> is:
</p>
<div class="example">
<pre class="example">@deftypefn <var>category</var> <var>data-type</var> <var>name</var> <var>arguments</var> &hellip;
<var>body-of-description</var>
@end deftypefn
</pre></div>

<p>Note that if the <var>category</var> or <var>data type</var> is more than one
word then it must be enclosed in braces to make it a single argument.
</p>
<p>If you are describing a procedure in a language that has packages,
such as Ada, you might consider using <code>@deftypefn</code> in a manner
somewhat contrary to the convention described in the preceding
paragraphs.  For example:
</p>
<div class="example">
<pre class="example">@deftypefn stacks private push @
       (@var{s}:in out stack; @
       @var{n}:in integer)
&hellip;
@end deftypefn
</pre></div>

<p>(In these examples the <code>@deftypefn</code> arguments are shown using
continuations (see <a href="Def-Cmd-Continuation-Lines.html">Def Cmd Continuation Lines</a>), but could be on a
single line.)
</p>
<p>In this instance, the procedure is classified as belonging to the
package <code>stacks</code> rather than classified as a &lsquo;procedure&rsquo; and its
data type is described as <code>private</code>.  (The name of the procedure
is <code>push</code>, and its arguments are <var>s</var> and <var>n</var>.)
</p>
<p><code>@deftypefn</code> creates an entry in the index of functions for
<var>name</var>.
</p>
</dd>
<dt><code>@deftypefun <var>data-type</var> <var>name</var> <var>arguments</var>&hellip;</code></dt>
<dd><span id="index-deftypefun"></span>
<p>The <code>@deftypefun</code> command is the specialized definition command
for functions in typed languages.  The command is equivalent to
&lsquo;<samp>@deftypefn Function &hellip;</samp>&rsquo;.  The template is:
</p>
<div class="example">
<pre class="example">@deftypefun <var>type</var> <var>name</var> <var>arguments</var>&hellip;
<var>body-of-description</var>
@end deftypefun
</pre></div>

<p><code>@deftypefun</code> creates an entry in the index of functions for
<var>name</var>.
</p>
</dd>
</dl>

<span id="index-Return-type_002c-own-line-for"></span>
<span id="index-deftypefnnewline"></span>
<p>Ordinarily, the return type is printed on the same line as the
function name and arguments, as shown above.  In source code, GNU
style is to put the return type on a line by itself.  So Texinfo
provides an option to do that: <code>@deftypefnnewline on</code>.
</p>
<p>This affects typed functions only&mdash;not untyped functions, not typed
variables, etc..  Specifically, it affects the commands in this
section, and the analogous commands for object-oriented languages,
namely <code>@deftypeop</code> and <code>@deftypemethod</code>
(see <a href="Object_002dOriented-Methods.html">Object-Oriented Methods</a>).
</p>
<p>Specifying <code>@deftypefnnewline off</code> reverts to the default.
</p>

<hr>
<div class="header">
<p>
Next: <a href="Typed-Variables.html" accesskey="n" rel="next">Typed Variables</a>, Previous: <a href="Variables-Commands.html" accesskey="p" rel="prev">Variables Commands</a>, Up: <a href="Def-Cmds-in-Detail.html" accesskey="u" rel="up">Def Cmds in Detail</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Command-and-Variable-Index.html" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>
Back to Directory File Manager