135 votes

Numéro de ligne C / C ++

À des fins de débogage, puis-je obtenir le numéro de ligne dans les compilateurs C / C ++? (manière standard ou spécifique pour certains compilateurs)

par exemple

 if(!Logical)
    printf("Not logical value at line number %d \n",LineNumber);
    // How to get LineNumber without writing it by my hand?(dynamic compilation)
 

Merci

218voto

Julien Hoarau Points 23987

Vous devez utiliser le préprocesseur macro __LINE__ et __FILE__. Ils sont des macros prédéfinies et une partie de la C/C++ standard. Lors du pré-traitement, ils sont remplacés respectivement par une constante chaîne de caractères contenant un entier représentant le numéro de ligne en cours et par le nom du fichier en cours.

D'autres préprocesseur variables :

  • __func__ : nom de la fonction (c'est la partie de C99, pas tous les compilateurs C++)
  • __DATE__ : une chaîne de caractères de la forme "Mmm jj aaaa"
  • __TIME__ : une chaîne de caractères de la forme "hh:mm:ss"

Votre code sera :

if(!Logical)
  printf("Not logical value at line number %d in file %s\n", __LINE__, __FILE__);

69voto

Brian R. Bondy Points 141769

Dans le cadre de la norme C++, il existe des macros prédéfinies que vous pouvez utiliser. Section 16.8 du standard C++ définit, entre autres choses, l' __LINE__ macro.

__LINE__: Le nombre de ligne de la source de courant de ligne (une décimale constante).
__FILE__: Le présumé nom du fichier source (une chaîne de caractères littérale).
__DATE__: La date de la traduction du fichier source (une chaîne de caractères littéral...)
__TIME__: Le temps de la traduction du fichier source (une chaîne de caractères littéral...)
__STDC__: Si__STDC__ est prédéfini
__cplusplus: Le nom de l' __cplusplus est défini à la valeur 199711L quand la compilation en C ++ de l'unité de traduction

Ainsi, votre code serait:

if(!Logical)
  printf("Not logical value at line number %d \n",__LINE__);

11voto

meagar Points 85475

Utilisez __LINE__ (double soulignement double soulignement LIGNE), le préprocesseur le remplacera par le numéro de ligne sur lequel il est rencontré.

10voto

Anton Points 1567

Commander __FILE__ et __LINE__ macros

5voto

Sanctus2099 Points 600

Essayez __FILE__ et __LINE__ .
Vous pouvez également trouver utile __DATE__ et __TIME__ .
Cependant, à moins que vous ne deviez déboguer un programme du côté client et que vous ayez donc besoin de consigner ces informations, vous devez utiliser le débogage normal.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X