我开始学习Linux模块的开发,我读了一些文章和教程,所以我找到了一个为简单的char设备提供源代码的站点。
在这段代码中,a__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))
引自Common Function Attributes
如果具有此属性的函数的调用方不使用其返回值,则
warn_unused_result
属性会导致发出警告。这对于不检查结果是安全问题或始终是错误(如realloc
)的函数非常有用。这也适用于clang和Intel compiler。
如果不使用返回值,此宏将要求编译器发出警告。这对于函数返回值来指示成功或失败(如
scanf
、printf
)或函数返回内存(如malloc
、realloc
)很重要。