You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Line-Control.html 6.4KB

3 yıl önce
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <!-- Copyright (C) 1987-2020 Free Software Foundation, Inc.
  4. Permission is granted to copy, distribute and/or modify this document
  5. under the terms of the GNU Free Documentation License, Version 1.3 or
  6. any later version published by the Free Software Foundation. A copy of
  7. the license is included in the
  8. section entitled "GNU Free Documentation License".
  9. This manual contains no Invariant Sections. The Front-Cover Texts are
  10. (a) (see below), and the Back-Cover Texts are (b) (see below).
  11. (a) The FSF's Front-Cover Text is:
  12. A GNU Manual
  13. (b) The FSF's Back-Cover Text is:
  14. You have freedom to copy and modify this GNU Manual, like GNU
  15. software. Copies published by the Free Software Foundation raise
  16. funds for GNU development. -->
  17. <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
  18. <head>
  19. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  20. <title>Line Control (The C Preprocessor)</title>
  21. <meta name="description" content="Line Control (The C Preprocessor)">
  22. <meta name="keywords" content="Line Control (The C Preprocessor)">
  23. <meta name="resource-type" content="document">
  24. <meta name="distribution" content="global">
  25. <meta name="Generator" content="makeinfo">
  26. <link href="index.html#Top" rel="start" title="Top">
  27. <link href="Index-of-Directives.html#Index-of-Directives" rel="index" title="Index of Directives">
  28. <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
  29. <link href="index.html#Top" rel="up" title="Top">
  30. <link href="Pragmas.html#Pragmas" rel="next" title="Pragmas">
  31. <link href="Diagnostics.html#Diagnostics" rel="prev" title="Diagnostics">
  32. <style type="text/css">
  33. <!--
  34. a.summary-letter {text-decoration: none}
  35. blockquote.indentedblock {margin-right: 0em}
  36. blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
  37. blockquote.smallquotation {font-size: smaller}
  38. div.display {margin-left: 3.2em}
  39. div.example {margin-left: 3.2em}
  40. div.lisp {margin-left: 3.2em}
  41. div.smalldisplay {margin-left: 3.2em}
  42. div.smallexample {margin-left: 3.2em}
  43. div.smalllisp {margin-left: 3.2em}
  44. kbd {font-style: oblique}
  45. pre.display {font-family: inherit}
  46. pre.format {font-family: inherit}
  47. pre.menu-comment {font-family: serif}
  48. pre.menu-preformatted {font-family: serif}
  49. pre.smalldisplay {font-family: inherit; font-size: smaller}
  50. pre.smallexample {font-size: smaller}
  51. pre.smallformat {font-family: inherit; font-size: smaller}
  52. pre.smalllisp {font-size: smaller}
  53. span.nolinebreak {white-space: nowrap}
  54. span.roman {font-family: initial; font-weight: normal}
  55. span.sansserif {font-family: sans-serif; font-weight: normal}
  56. ul.no-bullet {list-style: none}
  57. -->
  58. </style>
  59. </head>
  60. <body lang="en">
  61. <a name="Line-Control"></a>
  62. <div class="header">
  63. <p>
  64. Next: <a href="Pragmas.html#Pragmas" accesskey="n" rel="next">Pragmas</a>, Previous: <a href="Diagnostics.html#Diagnostics" accesskey="p" rel="prev">Diagnostics</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="Index-of-Directives.html#Index-of-Directives" title="Index" rel="index">Index</a>]</p>
  65. </div>
  66. <hr>
  67. <a name="Line-Control-1"></a>
  68. <h2 class="chapter">6 Line Control</h2>
  69. <a name="index-line-control"></a>
  70. <p>The C preprocessor informs the C compiler of the location in your source
  71. code where each token came from. Presently, this is just the file name
  72. and line number. All the tokens resulting from macro expansion are
  73. reported as having appeared on the line of the source file where the
  74. outermost macro was used. We intend to be more accurate in the future.
  75. </p>
  76. <p>If you write a program which generates source code, such as the
  77. <code>bison</code> parser generator, you may want to adjust the preprocessor&rsquo;s
  78. notion of the current file name and line number by hand. Parts of the
  79. output from <code>bison</code> are generated from scratch, other parts come
  80. from a standard parser file. The rest are copied verbatim from
  81. <code>bison</code>&rsquo;s input. You would like compiler error messages and
  82. symbolic debuggers to be able to refer to <code>bison</code>&rsquo;s input file.
  83. </p>
  84. <a name="index-_0023line"></a>
  85. <p><code>bison</code> or any such program can arrange this by writing
  86. &lsquo;<samp>#line</samp>&rsquo; directives into the output file. &lsquo;<samp>#line</samp>&rsquo; is a
  87. directive that specifies the original line number and source file name
  88. for subsequent input in the current preprocessor input file.
  89. &lsquo;<samp>#line</samp>&rsquo; has three variants:
  90. </p>
  91. <dl compact="compact">
  92. <dt><code>#line <var>linenum</var></code></dt>
  93. <dd><p><var>linenum</var> is a non-negative decimal integer constant. It specifies
  94. the line number which should be reported for the following line of
  95. input. Subsequent lines are counted from <var>linenum</var>.
  96. </p>
  97. </dd>
  98. <dt><code>#line <var>linenum</var> <var>filename</var></code></dt>
  99. <dd><p><var>linenum</var> is the same as for the first form, and has the same
  100. effect. In addition, <var>filename</var> is a string constant. The
  101. following line and all subsequent lines are reported to come from the
  102. file it specifies, until something else happens to change that.
  103. <var>filename</var> is interpreted according to the normal rules for a string
  104. constant: backslash escapes are interpreted. This is different from
  105. &lsquo;<samp>#include</samp>&rsquo;.
  106. </p>
  107. </dd>
  108. <dt><code>#line <var>anything else</var></code></dt>
  109. <dd><p><var>anything else</var> is checked for macro calls, which are expanded.
  110. The result should match one of the above two forms.
  111. </p></dd>
  112. </dl>
  113. <p>&lsquo;<samp>#line</samp>&rsquo; directives alter the results of the <code>__FILE__</code> and
  114. <code>__LINE__</code> predefined macros from that point on. See <a href="Standard-Predefined-Macros.html#Standard-Predefined-Macros">Standard Predefined Macros</a>. They do not have any effect on &lsquo;<samp>#include</samp>&rsquo;&rsquo;s
  115. idea of the directory containing the current file.
  116. </p>
  117. <hr>
  118. <div class="header">
  119. <p>
  120. Next: <a href="Pragmas.html#Pragmas" accesskey="n" rel="next">Pragmas</a>, Previous: <a href="Diagnostics.html#Diagnostics" accesskey="p" rel="prev">Diagnostics</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="Index-of-Directives.html#Index-of-Directives" title="Index" rel="index">Index</a>]</p>
  121. </div>
  122. </body>
  123. </html>