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