sim*_*mon 2 c linux-device-driver linux-kernel
我正在学习 Linux 内核模块开发。我阅读了文章和教程,并找到了一个提供简单字符设备源代码的站点。
在代码中,a__must_check用于一个函数。
这是原型:
__must_check int register_device(void);
Run Code Online (Sandbox Code Playgroud)
这是函数:
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;
}
Run Code Online (Sandbox Code Playgroud)
有什么用__must_check?这是我发现的唯一使用它的代码。
__must_check 定义为:
#define __must_check __attribute__((warn_unused_result))
Run Code Online (Sandbox Code Playgroud)
来自常用函数属性的引用
warn_unused_result如果具有此属性的函数的调用者不使用其返回值,则该属性会导致发出警告。这对于不检查结果是安全问题或始终是错误的函数很有用,例如realloc.
如果未使用返回值,此宏会要求编译器发出警告。这是函数的返回值重要指示成功或失败一样scanf,printf或函数返回的内存一样malloc,realloc。