为啥这个静态函数有三个前缀?

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】:

__devexitinclude/linux.h 中定义。确保包含该标题。如果您已经这样做了,请确保您的代码中没有任何语法错误。还要检查前几行是否有错误,例如。缺少分号。

【讨论】:

以上是关于为啥这个静态函数有三个前缀?的主要内容,如果未能解决你的问题,请参考以下文章

为啥枚举的构造函数不能访问静态字段?

为啥线程过程应该是静态或成员函数

请教一下C#中父类静态构造函数在子类中为啥不会和子类的静态构造函数一起执行

c#里为啥有的使用时函数需要new一个对象而有的不用?为啥不直接调用就好?

php 闭包:为啥绑定到静态类时匿名函数声明中的“静态”?

为啥这些静态函数不按预期从另一个线程返回?