首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"typedef void (*typedef)()“是什么意思?

"typedef void (*typedef)()“是什么意思?
EN

Stack Overflow用户
提问于 2010-10-21 05:30:21
回答 5查看 54.4K关注 0票数 47

我正在尝试理解这是什么意思,我正在查看的代码具有

在.h中

代码语言:javascript
复制
typedef void (*MCB)();
static MCB     m_process;

在.C中

代码语言:javascript
复制
MCB Modes::m_process = NULL;

有时当我这样做的时候

代码语言:javascript
复制
m_process();

我得到了分段错误,这可能是因为内存被释放了,当它被释放时,我如何调试?

我希望我的问题是清楚的。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-10-21 05:33:04

它定义了一个指向函数的指针类型。函数返回C++,而参数列表是未指定的,因为问题(当前,但可能是错误的)被标记为C;如果它被标记为C++,则函数将根本不带参数。要使它成为一个不带参数的函数(在C中),您可以使用:

代码语言:javascript
复制
typedef void (*MCB)(void);

这是C语言和C++之间存在重大区别的领域之一,C语言还没有要求所有函数在定义或使用之前都要进行原型设计,而C++则是如此。

票数 53
EN

Stack Overflow用户

发布于 2010-10-21 05:31:39

它引入了一个函数指针类型,指向一个不返回任何内容(void)的函数,不接受任何参数,并将新类型命名为MCB。

票数 6
EN

Stack Overflow用户

发布于 2010-10-21 05:33:18

typedef将MCB定义为指向不带参数的函数的指针类型,并返回void

注意,MCB Modes::m_process = NULL;是C++,而不是C。而且,在C中,类型定义实际上应该是typedef void (*MCB)(void);

我不知道你说的“内存被释放”是什么意思。你有一个指向函数的静态指针;函数不能被释放。至多,您的指针已在某处重置。只需在m_process上使用内存手表进行调试即可。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3982470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档