关于__LINE__最早是在李先静老师的《程序员成长计划》中看到的,当时只是用来调试时使用,
由于直接打印出错行,再结合__func__就可以找到是哪个函数,哪一行。
后来在分析Contiki时发现里边的protothread切换机制竟然是switch语句+__LINE__,
没想到__LINE__还能这样用。
虽然写程序时,经常使用,但是对于其本源没有彻底了解,所以这次写个简单的小程序看看。
又查询了一下发现__LINE__属于宏定义,这个是ANSI标准规定的
The following macro names shall be defined by the implementation
__DATE__
__FILE__
__LINE__
__STDC__
__STDC_HOSTED__
__STDC_VERSION__
__TIME__
而这里__func__这个宏定义,是gcc对C语言的扩展。
test_line2.c
test_line.c
使用的GCC:
gcc version 3.2.2
在vi中输入
:!gcc -o test_line test_line.c test_line2.c
:!./test_line
运行结果:
附录:
编译后的test_line,调用objdump命令
objdump -S test_line > test_line.txt
其中截取main和test_line两个函数的汇编代码如下。
main函数汇编代码:
test_line函数汇编代码:
参考链接:
http://blog.chinaunix.net/uid-22566367-id-381995.html
http://bbs.chinaunix.net/thread-3660159-1-1.html