如何理解void(* action)(struct softirq_action *)

时间:2018-07-18 13:46:10

标签: c

这是Linux内核中的软中断。如何理解void (*action)(struct softirq_action *);的定义?

struct softirq_action
{
    void (*action)(struct softirq_action *);
};

4 个答案:

答案 0 :(得分:3)

从最左边的标识符开始,然后记住以下规则,继续前进:

T *a[N];   // a is an array of pointer to T
T (*a)[N]; // a is a pointer to an array of T
T *f();    // f is a function returning a pointer to T
T (*f)();  // f is a pointer to a function returning T

所以:

       action                                -- action
      *action                                -- is a pointer to
     (*action)(                       )      -- a function taking
     (*action)(                       )      --   unnamed parameter
     (*action)(                      *)      --   is a pointer to
     (*action)(struct softirq_action *)      --   struct softirq_action
void (*action)(struct softirq_action *);     -- and returning void

答案 1 :(得分:0)

将动作声明为函数的指针(以指向结构softirq_action的指针作为唯一参数)返回void

答案 2 :(得分:0)

正如答案所说:这是一个声明而不是定义。 怎么理解呢?您可以按照以下步骤操作: 1-以标识符开头,后跟星号“ action”,因为它以星号开头,因此是指针 2-如果用括号括起来,则它是函数的指针。 3-读取指针名称之前的项目,这是返回类型 4-读取指针名称后的项目,这是函数参数。

所以总结一下: action是指向函数的指针,该函数返回void并将结构指针作为参数。

答案 3 :(得分:0)

这是一个function pointer变量(称为动作),可以指向带有struct softirq_action *参数和返回值void的任何函数。

例如,如果您具有此功能:

void IRQ_handler(struct softirq_action *);

然后您可以将其地址提供给指针,例如

action = &IRQ_handler;

并称呼它

action(action_struct);

使用函数指针,您可以在运行时确定要调用的函数。