【问题标题】:Is DEFINE_MUTEX a function or a macro?DEFINE_MUTEX 是函数还是宏?
【发布时间】:2023-03-21 08:54:01
【问题描述】:

我正在尝试掌握 C 和模块开发, (遵循http://pete.akeo.ie/2011/08/writing-linux-device-driver-for-kernels.html 的优秀示例)

现在,什么是 DEFINE_MUTEX?一个函数?宏?

DEFINE_MUTEX(parrot_device_mutex);

如果是函数,UC函数名的原理是什么?

(如果有更多关于 udev 开发的指南,请提示。)

【问题讨论】:

  • lxr.free-electrons.com/ident?i=DEFINE_MUTEX 几乎回答了它(谷歌搜索第一次点击)。
  • 回答这个问题的更好方法是首先查看相关的头文件并查找DEFINE_MUTEX。那里经常有解释其用途的文档。这只是对从头文件中定义的任何宏或函数或任何符号的一般建议。是的,ALL_UPPERCASE 通常用于宏和/或编译时常量,但这只是一种流行的约定,而不是规则
  • @dvnrrs,谢谢,但是您引用的页面同时显示“定义为预处理器宏”和“定义为函数原型......”。从菜鸟的角度应该如何阅读?
  • LXR 使用了错误的术语(它应该“声明为函数原型”而不是“定义”),并且它的解析启发式方法是错误的(因为它实际上根本不是一个函数)。
  • 它在mutex.h 中显示为宏。所有其他列表都是.c 文件。无论如何,我的观点是这种东西很容易搜索(不仅仅是在 LXR 上)。

标签: c linux-device-driver udev


【解决方案1】:

这是一个宏

#define DEFINE_MUTEX(mutexname) struct mutex mutexname = __MUTEX_INITIALIZER(mutexname)

参考Linux/include/linux/mutex.h

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 2012-09-28
    • 2020-05-31
    相关资源
    最近更新 更多