<!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>#line Syntax Details (GNU Texinfo 6.7)</title>
<meta name="description" content="#line Syntax Details (GNU Texinfo 6.7)">
<meta name="keywords" content="#line Syntax Details (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="External-Macro-Processors.html" rel="up" title="External Macro Processors">
<link href="Include-Files.html" rel="next" title="Include Files">
<link href="_0023line-and-TeX.html" rel="prev" title="#line and TeX">
<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="g_t_0023line-Syntax-Details"></span><div class="header">
<p>
Previous: <a href="_0023line-and-TeX.html" accesskey="p" rel="prev">‘<samp>#line</samp>’ and TeX</a>, Up: <a href="External-Macro-Processors.html" accesskey="u" rel="up">External Macro Processors</a> [<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="g_t_0023line-Syntax-Details-1"></span><h4 class="subsection">17.6.3 ‘<samp>#line</samp>’ Syntax Details</h4>
<span id="index-_0023line-syntax-details"></span>
<span id="index-Syntax-details_002c-_0023line"></span>
<span id="index-Regular-expression_002c-for-_0023line"></span>
<p>Syntax details for the ‘<samp>#line</samp>’ directive: the ‘<samp>#</samp>’ character
can be preceded or followed by whitespace, the word ‘<samp>line</samp>’ is
optional, and the file name can be followed by a whitespace-separated
list of integers (these are so-called “flags” output by CPP in some
cases). For those who like to know the gory details, the actual
(Perl) regular expression which is matched is this:
</p>
<div class="example">
<pre class="example">/^\s*#\s*(line)? (\d+)(( "([^"]+)")(\s+\d+)*)?\s*$/
</pre></div>
<p>As far as we’ve been able to tell, the trailing integer flags only
occur in conjunction with a filename, so that is reflected in the
regular expression.
</p>
<p>As an example, the following is a syntactically valid ‘<samp>#line</samp>’
directive, meaning line 1 of <samp>/usr/include/stdio.h</samp>:
</p>
<div class="example">
<pre class="example"># 1 "/usr/include/stdio.h" 2 3 4
</pre></div>
<p>Unfortunately, the quoted filename (‘<samp>"..."</samp>’) has to be optional,
because M4 (especially) can often generate ‘<samp>#line</samp>’ directives
within a single file. Since the ‘<samp>line</samp>’ is also optional, the
result is that lines might match which you wouldn’t expect, e.g.,
</p>
<div class="example">
<pre class="example"># 1
</pre></div>
<p>The possible solutions are described above (see <a href="_0023line-Directive.html">‘<samp>#line</samp>’ Directive</a>).
</p>
</body>
</html>