【问题标题】:C - Use plain array instead Typedef [duplicate]C - 使用普通数组而不是 Typedef [重复]
【发布时间】:2022-10-01 00:06:42
【问题描述】:

我在一些代码中看到了这样的内容:

typedef int (*action)(va_list *);

并像这样使用它

action  actions[256];

但是 typedef 作用于什么?我不明白,如果我不想在这里使用 typedef 我怎么能得到相同的结果?我尝试了很多方法来做到这一点,但没有人在工作

  • 您拥有的是函数指针的 typedef。
  • typedef 创建一个别名一种类型。做例如typedef int foo; 有效,并创建符号 foo 作为 int 的别名。所示typedef 为指向函数的指针创建别名,并将别名命名为action
  • 所以actions 是一个函数指针数组。当你把它们写出来时,它们会让人感到困惑,所以 typedef 是个好主意。
  • 谢谢你的回复 !我知道 typedef 创建一个别名,但在这里,如果我不想使用 typedef 我应该写的东西,用这个例子?
  • int (*(actions[256]))(va_list *); 现在你明白为什么别名更可取了。

标签: c


【解决方案1】:
typedef int (*action)(va_list *);

定义名称为action 的类型别名。

您可以通过删除 typedef 将其转换为定义变量:

int (*action2)(va_list *);

现在action2 是一个指向函数的指针,它以va_list* 作为其单个参数,并返回int。具有此签名的函数示例:

int action_function(va_list *arg);

现在你的

action actions[256];

定义一个数组,其中每个元素都是这种类型的action,这是指向函数的指针。没有typedef,同样是

int (*actions2[256])(va_list *);

所以actions2 是一个由 256 个指针组成的数组,指向采用va_list* 参数并返回int 的函数。


是的,这是混乱的语法......

【讨论】:

    【解决方案2】:

    如果您不想为此使用 typedef,则“完全写出”的形式将是

    int (*actions[256])(va_list *);
    

    我希望这能说明为什么人们通常更喜欢为将嵌入更复杂类型的函数指针类型创建 typedef 名称。

    【讨论】:

      猜你喜欢
      • 2014-11-23
      • 2019-09-02
      • 1970-01-01
      • 1970-01-01
      • 2012-06-28
      • 2010-12-10
      • 2014-12-13
      • 1970-01-01
      • 2013-03-25
      相关资源
      最近更新 更多