我正在学习有关Linux内核模块开发的知识。我阅读文章和教程,找到了一个网站,该网站为简单的炭设备提供源代码。
在代码中,__must_check
用于一个函数。
这是原型:
__must_check int register_device(void);
这是功能:
int register_device(void)
{
int result = 0;
printk( KERN_NOTICE "Simple-driver: register_device() is called." );
result = register_chrdev( 0, device_name, &simple_driver_fops );
if( result < 0 )
{
printk( KERN_WARNING "Simple-driver: can't register character device with errorcode = %i", result );
return result;
}
device_file_major_number = result;
printk( KERN_NOTICE "Simple-driver: registered character device with major number = %i and minor numbers 0...255"
, device_file_major_number );
return 0;
}
__must_check
的实用程序是什么?这是我发现使用此使用的唯一代码。
__must_check
定义为:
#define __must_check __attribute__((warn_unused_result))
引用来自共同函数属性
如果使用此属性的函数的呼叫者不使用其返回值,则
warn_unused_result
属性会发出警告。这对于不检查结果的功能很有用,要么是安全问题,要么是一个错误,例如realloc
。
这也应用于Clang和Intel编译器。
该宏要求编译器是否使用返回值,请发出警告。这对于函数返回值很重要,以指示成功或失败(例如scanf
,printf
)或功能返回记忆(例如malloc
,realloc
。