C 在函数声明中uu devexit是什么意思?

C 在函数声明中uu devexit是什么意思?,c,function,C,Function,我看到的一个司机 static void __devexit rtsx_remove(struct pci_dev *pci) 在函数定义的上下文中,\uu devexit是什么意思?我见过的其他函数最多有一个静态的和一个返回类型。“……它很可能只是一个注释……”——barak manos 尤里卡!原来神秘元素可能被称为an,它添加了关于函数的额外信息。编译器可以检查这些额外的信息,以捕获可能未被注意到的bug 编辑:@mattmcnab说这不是注释。增加了不确定性。长话短说: 这是一个扩展为

我看到的一个司机

static void __devexit rtsx_remove(struct pci_dev *pci)
在函数定义的上下文中,
\uu devexit
是什么意思?我见过的其他函数最多有一个静态的和一个返回类型。

“……它很可能只是一个注释……”——barak manos

尤里卡!原来神秘元素可能被称为an,它添加了关于函数的额外信息。编译器可以检查这些额外的信息,以捕获可能未被注意到的bug


编辑:@mattmcnab说这不是注释。增加了不确定性。

长话短说:

这是一个扩展为一组gcc属性的宏。它们是一种向编译器提供有关代码中各种内容的特殊信息的方法,例如,在本例中,函数

不同的编译器有不同的语法。为此,它不是标准化的。例如,gcc使用属性,但其他编译器使用不同的构造

长篇大论长篇大论:

所以,我不是Linux内核专家,但从源代码来看,这个宏用于。我相信这意味着该功能应该在特定设备退出时执行某些操作

例如,您提供的函数似乎来自一组用于使用Realtek PCI Express读卡器驱动程序的热插拔函数

那个宏实际上是做什么的?让我们仔细看看宏的定义:

#define __devexit        __section(.devexit.text) __exitused __cold
第一部分是
\u节(.devexit.text)

如您所见,这将创建一个
\uuuuuu属性(\uuuu section\uuuu())
,节名为
”.devexit.text“
。这意味着gcc将使用此属性将函数的汇编代码编译成编译二进制文件中名为
.devexit.text
(而不是默认部分)的命名部分

第二部分是已存在的
(仅当定义了
模块
宏时才定义为某物):

根据gcc版本,所使用的
\u定义如下:

# define __used                 __attribute__((__used__))
# define __used                 __attribute__((__unused__))
或者像这样:

# define __used                 __attribute__((__used__))
# define __used                 __attribute__((__unused__))
前者确保具有此属性的函数被编译,即使它没有在任何地方被引用。后者在相同情况下会抑制编译器警告,尽管它不会以任何方式影响编译

最后,
\uuu cold

#define __cold                  __attribute__((__cold__))
这是一个属性,它通知编译器具有此属性的函数不会经常被调用,因此它可以相应地进行优化

苏欧,我们到底有什么?看起来标有
\uuu-devexit
的函数是不常调用的函数(如果调用过的话),并填充到指定的部分中


所有的源代码都取自。看起来宏现在已经被使用了。

这些属性在Linux内核中用于某些驱动程序函数和数据声明,将它们放在单独的部分中,在某些情况下可能会被丢弃


但是,从3.10.x开始不再使用(或定义)。请参见:

为什么不右键单击该符号,转到其定义,亲自查看其确切含义???它很可能只是一个注释,用于通过外部工具生成预定义的警告,该工具检查编码的正确性或诸如此类的内容。这是Unix内核中的某个宏:请注意,您可以使用一个函数,例如
static inline int max(int x,int y){return(x>y)→x:y;}
其中添加了一个
内联
。您可以有一个内联函数,它返回指向(常量)易失性数据的常量指针,以及各种其他内容。您可以有一个
静态void\u Noreturn inline exit\u noisely(void){fprintf(stderr,“exit\n”);exit(exit\u FAILURE)}
,等等。Microsoft使用和/或使用了各种限定符,例如
far
near
cdecl
dllimport
dllexport
,等等(可能带有下划线)。你的
\uuu-devexit
是另一个这样的限定词。@barakmanos我没有使用一个可能是很多东西的想法,因为它很可能是一个宏。如果它是,那么它肯定不是一个“注释”。@Kenkron:请参阅中的链接-它会导致一个提交,其中简要记录了这个宏及其兄弟的用途。