[cpp.line] # 15 Preprocessing directives [[cpp]](./#cpp) ## 15.8 Line control [cpp.line] [1](#1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/preprocessor.tex#L2066) The [*string-literal*](lex.string#nt:string-literal "5.13.5 String literals [lex.string]") of a#line directive, if present, shall be a character string literal[.](#1.sentence-1) [2](#2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/preprocessor.tex#L2072) The[*line number*](#def:line_number "15.8 Line control [cpp.line]") of the current source line is the line number of the current physical source line, i.e., it is one greater than the number of new-line characters read or introduced in [translation phase 1](lex.phases "5.2 Phases of translation [lex.phases]") while processing the source file to the current preprocessing token[.](#2.sentence-1) [3](#3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/preprocessor.tex#L2082) A preprocessing directive of the form # line [*digit-sequence*](lex.fcon#nt:digit-sequence "5.13.4 Floating-point literals [lex.fcon]") [*new-line*](cpp.pre#nt:new-line "15.1 Preamble [cpp.pre]") causes the implementation to behave as if the following sequence of source lines begins with a source line that has a line number as specified by the digit sequence (interpreted as a decimal integer)[.](#3.sentence-1) If the digit sequence specifies zero or a number greater than 2147483647, the program is ill-formed[.](#3.sentence-2) [4](#4) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/preprocessor.tex#L2095) A preprocessing directive of the form # line [*digit-sequence*](lex.fcon#nt:digit-sequence "5.13.4 Floating-point literals [lex.fcon]") " [*s-char-sequence*](lex.string#nt:s-char-sequence "5.13.5 String literals [lex.string]")opt " [*new-line*](cpp.pre#nt:new-line "15.1 Preamble [cpp.pre]") sets the presumed line number similarly and changes the presumed name of the source file to be the contents of the character string literal[.](#4.sentence-1) [5](#5) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/preprocessor.tex#L2104) A preprocessing directive of the form # line [*pp-tokens*](cpp.pre#nt:pp-tokens "15.1 Preamble [cpp.pre]") [*new-line*](cpp.pre#nt:new-line "15.1 Preamble [cpp.pre]") (that does not match one of the two previous forms) is permitted[.](#5.sentence-1) The preprocessing tokens afterline on the directive are processed just as in normal text (each identifier currently defined as a macro name is replaced by its replacement list of preprocessing tokens)[.](#5.sentence-2) If the directive resulting after all replacements does not match one of the two previous forms, the program is ill-formed; otherwise, the result is processed as appropriate[.](#5.sentence-3)