Linux模块__must_check批注

问题描述 投票:1回答:1

我正在学习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的用途是什么?这是我发现的唯一使用此代码的代码。

c linux-kernel linux-device-driver
1个回答
4
投票

__must_check定义为:

#define __must_check __attribute__((warn_unused_result))

[C0的语录

Common Function Attributes属性会导致发出警告,如果具有此属性的函数的调用者不使用其返回值。对于不检查结果是安全性问题还是总是有错误的功能(例如warn_unused_result),此功能很有用。

这也适用于reallocclang

如果不使用返回值,此宏将要求编译器发出警告。这对于函数返回值来指示成功或失败(例如Intel compilerscanf)或函数返回存储器(例如printfmalloc)非常重要。

© www.soinside.com 2019 - 2024. All rights reserved.