Filename and line information
Modifie le numéro de ligne actuel et le nom du fichier dans le préprocesseur.
Table des matières |
Syntaxe
#line
lineno
|
(1) | ||||||||
#line
lineno
"
filename
"
|
(2) | ||||||||
Explication
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'à C99)
2147483647
(depuis C99)
, 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).
Le numéro de ligne suivant la directive #line __LINE__ n'est pas spécifié (il y a deux valeurs possibles que __LINE__ peut développer dans ce cas : le nombre de fins de ligne vues jusqu'à présent, ou le nombre de fins de ligne vues jusqu'à présent plus la fin de ligne qui termine la #line directive). Ceci est le résultat du DR 464 , qui s'applique rétroactivement.
Exemple
#include <assert.h> #define FNAME "test.c" int main(void) { #line 777 FNAME assert(2+2 == 5); }
Sortie possible :
test: test.c:777: int main(): Assertion `2+2 == 5' failed.
Références
- Norme C17 (ISO/CEI 9899:2018) :
-
- 6.10.4 Contrôle de ligne (p: 126)
-
- J.1 Comportement non spécifié
- Norme C11 (ISO/CEI 9899:2011) :
-
- 6.10.4 Contrôle de ligne (p: 173)
- Norme C99 (ISO/IEC 9899:1999) :
-
- 6.10.4 Contrôle de ligne (p: 158)
- Norme C89/C90 (ISO/IEC 9899:1990) :
-
- 3.8.4 Contrôle de ligne
Voir aussi
|
Documentation C++
pour
Informations sur le nom de fichier et la ligne
|