Namespaces
Variants

Filename and line information

From cppreference.net
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications ( until C++17* )
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous

Modifie le numéro de ligne du code source et, optionnellement, le nom du fichier courant, dans le préprocesseur.

Table des matières

Syntaxe

#line lineno (1)
#line lineno " filename " (2)

Explication

1) Modifie le numéro de ligne actuel du préprocesseur en lineno . Les expansions de la macro __LINE__ au-delà de ce point s'étendront à lineno plus le nombre de lignes de code source réelles rencontrées depuis.

2) Modifie également le nom du fichier de préprocesseur actuel en filename . Les expansions de la macro __FILE__ à partir de ce point produiront filename .

Tous les jetons de prétraitement (constantes de macro ou expressions) sont autorisés comme arguments à #line tant qu'ils se développent en un entier décimal valide suivi optionnellement d'une chaîne de caractères valide.

lineno doit être une séquence d'au moins un chiffre décimal (le programme est mal formé sinon) et est toujours interprété comme décimal (même s'il commence par 0 ).

Si lineno est 0 ou supérieur à 32767 (jusqu'en C++11) 2147483647 (depuis C++11) , le comportement est indéfini.

Notes

Cette directive est utilisée par certains outils de génération automatique de code qui produisent des fichiers source C++ à partir d'un fichier écrit dans un autre langage. Dans ce cas, #line des directives peuvent être insérées dans le fichier C++ généré référençant les numéros de ligne et le nom du fichier source original (modifiable par l'humain).

Exemple

#include <cassert>
#define FNAME "test.cc"
int main()
{
#line 777 FNAME
        assert(2+2 == 5);
}

Sortie possible :

test: test.cc:777: int main(): Assertion `2+2 == 5' failed.

Références

  • Norme C++23 (ISO/CEI 14882:2024) :
  • 15.7 Contrôle de ligne [cpp.line]
  • Norme C++20 (ISO/CEI 14882:2020) :
  • 15.7 Contrôle de ligne [cpp.line]
  • Norme C++17 (ISO/CEI 14882:2017) :
  • 19.4 Contrôle de ligne [cpp.line]
  • Norme C++14 (ISO/CEI 14882:2014) :
  • 16.4 Contrôle de ligne [cpp.line]
  • Norme C++11 (ISO/IEC 14882:2011) :
  • 16.4 Contrôle de ligne [cpp.line]
  • Norme C++98 (ISO/CEI 14882:1998) :
  • 16.4 Contrôle de ligne [cpp.line]

Voir aussi

une classe représentant des informations sur le code source, telles que les noms de fichiers, les numéros de ligne et les noms de fonctions
(classe)
Documentation C pour Informations sur le nom de fichier et la ligne