什么是"typedef void(*Something)()"的意思

Dog*_*Dog 39 c++ typedef static-members void-pointers

我试图理解这意味着什么,我正在看的代码

在.h

typedef void (*MCB)();
static MCB     m_process;
Run Code Online (Sandbox Code Playgroud)

在.C

MCB Modes::m_process = NULL;
Run Code Online (Sandbox Code Playgroud)

有时当我做的时候

m_process();
Run Code Online (Sandbox Code Playgroud)

我得到了分段错误,这可能是因为内存被释放了,我怎样才能在它被释放时进行调试?

我希望我的问题很清楚.

Jon*_*ler 46

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

typedef void (*MCB)(void);
Run Code Online (Sandbox Code Playgroud)

这是C之间存在显着差异的领域之一,C还没有 - 要求所有函数在定义或使用之前都要进行原型化,而C++则需要.


Kri*_*ula 8

让我们举个例子

typedef void (*pt2fn)(int);
Run Code Online (Sandbox Code Playgroud)

在这里,我们定义了一个类型 pt2fn。这种类型的变量指向函数,该函数采用整数作为参数并且不返回任何值。

pt2fn kk;
Run Code Online (Sandbox Code Playgroud)

这里,kk 是一个 pt2fn 类型的变量,它可以指向任何以整数作为输入并且不返回任何值的函数。

参考: https: //cs.nyu.edu/courses/spring12/CSCI-GA.3033-014/Assignment1/function_pointers.html


Jim*_*som 6

它引入了一个函数指针类型,指向一个函数返回任何内容(void),不带任何参数并命名新类型MCB.


Oli*_*rth 5

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

请注意,这MCB Modes::m_process = NULL;是 C++,而不是 C。此外,在 C 中,typedef 应该真的是typedef void (*MCB)(void);.

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