C macros __LINE__, __FILE__ and __func__
2013-01-21 21:54
330 查看
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
This prints out
To get the name of the file, use the preprocessor variable
This prints out
C99 (the most recent version of the C language, at the time of writing) introduced another macro called
This prints out
You can change the values used for
which tells the C compiler that the next line after the line directive is line 20 of
This prints out
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
__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 for
__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 20 of
some-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 as
__func__for C. For C++,
__PRETTY_FUNCTION__is something different.
相关文章推荐
- C macros __LINE__, __FILE__ and __func__
- C macros __LINE__, __FILE__ and __func__
- C macros __LINE__, __FILE__ and __func__
- 对于FILE,LINE,func这样的宏
- 关键字: C/C++,预定义宏,__FILE__, __LINE__, __DATE__,__TIME__,__func__,__FUNCTION__ __FILE__:当前源代码文件名的字符串文
- trim content between begin and end lines or get from keyword line to file end
- # and #line and __FILE__ and __LINE__
- gcc中用于预编译的宏(如__cplusplus , __func__ , __FILE__ , __LINE__ 等)
- Using __FILE__ and __LINE__ to Report Errors
- FAQ: Why is file and line information available for some warnings in FxCop but not for others?
- C语言中的__FILE__、__LINE__和__func__等预定义跟踪调试
- Lua 中如何实现类似C语言中 __FILE__, __LINE__, __FUNC__
- C++ '__FILE__' and '__LINE__
- C Language Study - __FILE__ & __func__ & __TIME__ & __DATE__ &__LINE__
- how to get the caller's module name, file name , function name and line number?
- add cool toolbar 256corler is easy,only two file and onCreate func is needed also the MainFrame.toolbar must resize to what real need and also the load width is same to it.
- Building Xcode iOS projects and creating *.ipa file from the command line
- Fastdfs 关于file: shared_func.c, line: 994, malloc 1 bytes fail问题的解决
- Bash Shell read file line by line and substring
- sed and awk process xml file in multi line