【发布时间】:2019-08-10 09:26:22
【问题描述】:
我正在深入研究语言,所以我可以理解代码中正在发生的事情,而不是打印一些东西然后观察看看会发生什么。
最近,为了更好地实现类函数表,我发现自己偶然发现了这个 C 语言标准:http://www.iso-9899.info/wiki/Typedef_Function_Type
我已经尝试过了,它似乎可以工作:
typedef void fnr(int x);
main()
{
fnr t;
}
对于我寻找将函数打包到我的结构中的方法来说,这似乎是一个美好的一天,直到我意识到 fnr t; 并没有我预期的那么有用。它既不能被分配,也不能以我希望的正确方式使用(对于 C 用户来说可能是 lambda)。它甚至在反汇编中都不存在!
此语言功能有什么作用?除了简化函数指针,它还能用来做什么?
【问题讨论】:
-
如果声明为
fnr *t;,则可以赋值,或者在变量声明时不需要*,只需将typedef更改为typedef void (*fnr)(int);,这样你就可以使用fnr t;并赋值它通常。也就是说,我非常不清楚你的目标。typedef只允许您将复杂的事物别名为简单的名称,您似乎希望它做一些非常不同的事情。 -
"善用(不只是创建指针)" 使用函数 typedef 使指针指向函数类型 可读 是最重要的之一它们的用途,恕我直言。 “
fnr t;是一个无用的字符串”fnr t;扩展为void t(int x);。你知道什么是函数声明以及它们的用途吗?使用 typedef 声明函数是否是一个好主意是另一个问题。 -
@HolyBlackCat 这不是函数声明,这是类型定义。如果你声明了同名的函数,它将不起作用
-
@IlyaPakhmutov 这是一个函数声明,see for yourself。
-
@IlyaPakhmutov 在该示例中,
fnr t;行与void t(int x);完全相同,这是一个函数声明。
标签: c function function-pointers typedef