为啥这个静态函数有三个前缀?
Posted
技术标签:
【中文标题】为啥这个静态函数有三个前缀?【英文标题】:Why does this static funtion have three prefixes?为什么这个静态函数有三个前缀? 【发布时间】:2015-06-11 18:27:28 【问题描述】:我正在尝试为我的 SD 卡构建驱动程序,但我在此行收到错误:
static void __devexit rtsx_remove(struct pci_dev *pci)
说:
/home/kenkron/Downloads/rts_pstor/rtsx.c:916:22: 错误:在 'rtsx_probe' 之前需要 '=',',',';', 'asm' 或 '__attribute__' static int __devinit rtsx_probe (struct pci_dev *pci, const struct pci_device_id *pci_id)
为什么__devexit
在函数名之前,它应该如何工作?
编辑:我的问题是关于函数定义上下文中的 __devexit
是什么。 Eugene Sh 可能暗示它是一个宏,但它在函数定义中会做什么?我见过的其他函数最多只有静态和返回类型。
【问题讨论】:
你确定你没有忘记分号吗?在上一行? 嗯?错误大约是rtsx_probe
。你引用的那一行声明了rtsx_remove
。您引用了完全不相关的行。
@AnT 带有一些未定义内容的宏扩展可能会让编译器对实际错误位置感到困惑
关于双下划线开头的名字见link
@rahultyagi 这不是一个变量。
【参考方案1】:
__devexit
在include/linux.h
中定义。确保包含该标题。如果您已经这样做了,请确保您的代码中没有任何语法错误。还要检查前几行是否有错误,例如。缺少分号。
【讨论】:
以上是关于为啥这个静态函数有三个前缀?的主要内容,如果未能解决你的问题,请参考以下文章
请教一下C#中父类静态构造函数在子类中为啥不会和子类的静态构造函数一起执行