It is possible for a C program to print the currently executing line of source code, the file of the source code, and the name of the current function. the currently executing line is available in a Preprocessor variable called__LINE__
:
#include <stdio.h>int main (){ printf ("This is line %d.\n", __LINE__); return 0;}
This prints out
This is line 5.
To get the name of the file, use the Preprocessor variable__FILE__
:
#include <stdio.h>int main (){ printf ("This is line %d of file \"%s\".\n", __LINE__, __FILE__); return 0;}
This prints out
This is line 6 of file "/share/websites/www.lemoda.net/c/line-file-func/file.c".
C99 (the most recent version of the C language, at the time of writing) introduced another macro called__func__
Which also names the function in use:
#include <stdio.h>#define BLURT printf ("This is line %d of file %s (function %s)\n",\ __LINE__, __FILE__, __func__)void silly_function (){ BLURT;}int main (){ BLURT; silly_function (); return 0;}
This prints out
This is line 13 of file /share/websites/www.lemoda.net/c/line-file-func/func.c (function main)This is line 8 of file /share/websites/www.lemoda.net/c/line-file-func/func.c (function silly_function)
You can change the values used__FILE__
And__LINE__
Using a line directive, which is a Preprocessor command of the form
#line 20 "some-file"
Which tells the C compiler that the next line after the line directive is line 20some-file
.
#include <stdio.h>#define BLURT printf ("This is line %d of file \"%s\" (function <%s>)\n",\ __LINE__, __FILE__, __func__)#line 99 "grody-to-the-max"void silly_function (){ BLURT;}#line 999 "bassetts-liquorice-allsorts"int main (){ BLURT; silly_function (); return 0;}
This prints out
This is line 1001 of file "bassetts-liquorice-allsorts" (function <main>)This is line 101 of file "grody-to-the-max" (function <silly_function>)
This line directive is used by facilities like "Lex" and "YACC" which output C code so that error messages are related to the input file rather than the Output C file.
GCC (the "GNU Compiler Collection") also defines__FUNCTION__
And__PRETTY_FUNCTION__
. These are both the same
__func__
For C. For C ++,__PRETTY_FUNCTION__
Is something different.
It is possible for a C program to print the currently executing line of source code, the file of the source code, and the name of the current function. the currently executing line is available in a Preprocessor variable called__LINE__
:
#include <stdio.h>int main (){ printf ("This is line %d.\n", __LINE__); return 0;}
This prints out
This is line 5.
To get the name of the file, use the Preprocessor variable__FILE__
:
#include <stdio.h>int main (){ printf ("This is line %d of file \"%s\".\n", __LINE__, __FILE__); return 0;}
This prints out
This is line 6 of file "/share/websites/www.lemoda.net/c/line-file-func/file.c".
C99 (the most recent version of the C language, at the time of writing) introduced another macro called__func__
Which also names the function in use:
#include <stdio.h>#define BLURT printf ("This is line %d of file %s (function %s)\n",\ __LINE__, __FILE__, __func__)void silly_function (){ BLURT;}int main (){ BLURT; silly_function (); return 0;}
This prints out
This is line 13 of file /share/websites/www.lemoda.net/c/line-file-func/func.c (function main)This is line 8 of file /share/websites/www.lemoda.net/c/line-file-func/func.c (function silly_function)
You can change the values used__FILE__
And__LINE__
Using a line directive, which is a Preprocessor command of the form
#line 20 "some-file"
Which tells the C compiler that the next line after the line directive is line 20some-file
.
#include <stdio.h>#define BLURT printf ("This is line %d of file \"%s\" (function <%s>)\n",\ __LINE__, __FILE__, __func__)#line 99 "grody-to-the-max"void silly_function (){ BLURT;}#line 999 "bassetts-liquorice-allsorts"int main (){ BLURT; silly_function (); return 0;}
This prints out
This is line 1001 of file "bassetts-liquorice-allsorts" (function <main>)This is line 101 of file "grody-to-the-max" (function <silly_function>)
This line directive is used by facilities like "Lex" and "YACC" which output C code so that error messages are related to the input file rather than the Output C file.
GCC (the "GNU Compiler Collection") also defines__FUNCTION__
And__PRETTY_FUNCTION__
. These are both the same
__func__
For C. For C ++,__PRETTY_FUNCTION__
Is something different.