路过遗帖:关于内核阅读中不解之处
在很多的.h .c文件里,经常能看见些有 "inline"关键字的函数声明据本人肤浅的认识,inline是c++中的内联关键字,这个关键字在c中
未曾看见过,我也在有关c语言的书中翻阅查找过,不才未找到相关注解
且据已本人对内核的粗浅认识,linux内核中大多数是c 和 asm写的。那这个
关键字又从何解释?
我是在/include/linux/pci.h中看到很多声明的stacit inline 的结构
和函数。其他的文件也有频繁出现这种声明
若c语言中有inline的关键字,哪又是何意思?
问题肤浅,
望各位大哥大姐大嫂大姐夫们,不吝赐教。 这是gnu c编译器支持的一个特性,函数会在调用位置上展开 比方说
在/include/linux/pci.h中
static inline int pci_enable_device(struct pci_dev *dev) { return -EIO; }
这应该算是pci_enable_device()函数的定义还是声明?
在/include/linux/pci.c中
int
pci_enable_device(struct pci_dev *dev)
{
return pci_enable_device_bars(dev, (1 << PCI_NUM_RESOURCES) - 1);
}
这是对该函数的定义
那就不太明白楼上的朋友说的意思
望再讲明白些 高手们
再给讲解讲解 你说的pci_enable_device真正的原型声明是这个:int pci_enable_device(struct pci_dev *dev);也在pci.h里面,那个inline函数算是另一个函数的定义。内联函数就是为了节省函数调用和返回的系统开销,而且编译器可以把调用函数和内联函数放在一起优化,把一些对时间要求比较高,代码本身长度又很短的函数做成内联函数。 楼上的意思说
gnu c编译器支持内联咯
据我对内联的粗浅认识,内联函数仅仅是节省c++中的类的成员函数调用和返回的系统开销,c本身是不支持的啊?
难道是gnu c编译器对inline作了宏预处理?<---瞎猜的 gcc对c语言做了很多扩充,inline只是其中之一,const也是,基本上所有的c编译器都对ansi c有扩充,这个具体内容需要看gcc的手册了 长见识了
谢谢 shy828301
真好人也!!!
以后有啥疑难,还要多仰仗阁下哦!!
页:
[1]