Contiki:__LINE__测试

关于__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语言的扩展。

Contiki:__LINE__测试_第1张图片

test_line2.c

Contiki:__LINE__测试_第2张图片

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函数汇编代码:
Contiki:__LINE__测试_第3张图片


test_line函数汇编代码:
Contiki:__LINE__测试_第4张图片


参考链接:

http://blog.chinaunix.net/uid-22566367-id-381995.html

http://bbs.chinaunix.net/thread-3660159-1-1.html

你可能感兴趣的:(Contiki:__LINE__测试)