Comportement de __LINE__ dans les fonctions en ligne

J’ai une macro qui passe le numéro de ligne et le nom du fichier à un gestionnaire d’erreurs:

#define SYSTEM_FAILURE (error_code, comment) \ System_Failure((error_code), (comment), __LINE__, __FILE__); 

Comment la __LINE__ sera- __LINE__ elle résolue lorsqu’elle sera utilisée dans une fonction en ligne?

 file.h: inline int divide(int x, int y) { if (y == 0) { SYSTEM_FAILURE(ENUM_DIVIDE_BY_ZERO, "divide by zero error"); } return x/y; } 

__LINE__ contiendra-t-il le numéro de ligne dans le fichier d’en-tête ou le numéro de ligne du fichier source où la fonction inline est appelée (en supposant que le compilateur effectue un “collage” dans le code source)?

En C et C ++, les macros ne sont pas (pour la plupart) évaluées avec une quelconque connaissance du code réel et sont traitées avant le code (d’où le nom “préprocesseur”). Par conséquent, __FILE__ sera évalué à “fichier.h” et __LINE__ sera évalué au numéro de ligne correspondant à la ligne sur laquelle SYSTEM_FAILURE apparaît dans fichier.h

Étant donné que les macros sont remplacées par leurs définitions avant la compilation, __LINE__ contiendra la ligne réelle du fichier dans lequel vous avez utilisé la macro. L’inligne n’affectera pas du tout ce comportement.

__LINE__ sera la ligne du fichier d’en-tête puisque le préprocesseur l’évaluera avant que le compilateur ne le voie jamais.