要研究LINUX内核,C语言是基础中的基础,但是LINUX并不是完全的标准C,而是对标准C做了很多扩展,这些扩展特性对于我们分析内核有着很重要的作用,下面做些总结性的工作。
8、当前函数名
- GNU C中预定义两个标志符保存当前函数的名字,
__FUNCTION__
保存函数在源码中的名字,__PRETTY__FUNCTION__
保存带语言特色的名字。 - 在C函数中这两个名字是相同的。在C++函数中,
__PRETTY_FUNCTION__
包括函数返回类型等额外信息,Linux内核只使用了__FUNCTION__
。
//fs/ext2/super.c
void ext2_update_dynamic_rev(structsuper_block* sb)
{
structext2_super_block * es = EXT2_SB(sb)->s_es;
if(le32_to_cpu(es->s_rev_level)->EXT2_GOOD_OLD_REV)
return;
ext2_warning(sb,__FUNCTION__,"\
updatingtorev%dbecauseofnewfeatureflag",\
"runninge2fsckisrecommended",\
EXT2_DYNAMIC_REV);
}
- 这里
__FUNCTION__
将被替换为函数名ext2_update_dynamic_rev
。 - 虽然
__FUNCTION__
看起来类似于标准C中的__FILE__
,但实际上__FUNCTION__
是被编译器替换的,不象__FILE__
被预处理器替换。 - 在C99中支持
__func__
宏,因此建议使用__func__
替代__FUNCTION__
。
===========我是华丽的分割线===========
更多知识:
点击关注专题:嵌入式Linux&ARM
或浏览器打开:https://www.jianshu.com/c/42d33cadb1c1
或扫描二维码: