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.