C 应为编译错误

C 应为编译错误,c,linux-device-driver,C,Linux Device Driver,我在设备驱动程序编程中遇到了以下声明: static int __init sum_init(void) 我已经看到了静态int sum\u init(void)。为什么上面的声明没有给出编译错误?因为\uuu init可能是某种\define,分配给不会导致编译错误的任何东西 #define __init 或者 就像说: 静态int uu init sum_init() { } 它没有返回任何值,因此没有发生错误。请看这里:这里感谢BinyaMint的链接,通常是不正确的(在linux设备

我在设备驱动程序编程中遇到了以下声明:

static int __init sum_init(void)

我已经看到了
静态int sum\u init(void)
。为什么上面的声明没有给出编译错误?

因为
\uuu init
可能是某种
\define
,分配给不会导致编译错误的任何东西

#define __init
或者

就像说:

静态int uu init sum_init()

{

}


它没有返回任何值,因此没有发生错误。

请看这里:这里感谢BinyaMint的链接,通常是不正确的(在linux设备驱动程序的上下文中)澄清:)我没有意识到海报是关于linux驱动程序的。不管怎样,_init只是一个宏,可以扩展为零,或者扩展为无害的东西。令人困惑的是,发帖人似乎不熟悉函数声明的GCC扩展。但是您的函数确实返回了一个值:0,事实上它必须返回,因为它声明返回一个int。不,不是。(我想你错过了真正的问题,可能是因为一开始就不太清楚)
#define __init __section(.init.text) __cold notrace
    return 0;