c++ typedef static-members void-pointers

c++ - Qué significa "typedef void(* Something)()"



static-members void-pointers (5)

Define un tipo de puntero a función. Las funciones devuelven nulo, y la lista de argumentos no se especifica porque la pregunta es (actualmente, pero posiblemente erróneamente) etiquetada como C; si se etiquetara C ++, entonces la función no tomaría ningún argumento. Para que sea una función que no tome argumentos (en C), usaría:

typedef void (*MCB)(void);

Esta es una de las áreas donde hay una diferencia significativa entre C, que aún no requiere que todas las funciones sean prototipadas antes de ser definidas o utilizadas, y C ++, que sí lo hace.

Estoy tratando de entender lo que esto significa, el código que estoy viendo tiene

en .h

typedef void (*MCB)(); static MCB m_process;

MCB Modes::m_process = NULL;

Y a veces cuando lo hago

m_process();

Tengo fallas en las segmentaciones, es probable porque la memoria fue liberada, ¿cómo puedo depurar cuando se libera?

Espero que mis preguntas sean claras.


Es un puntero a la función. Obtiene una FALLA DE SEGMENTACIÓN porque está tratando de realizar una llamada a una función cuya dirección no es válida ( NULL ).

De acuerdo con su muestra específica, la función no debe devolver ningún valor ( void ) y no debe recibir ningún parámetro () .

Esto debería funcionar:

void a() { printf("Hello!"); } int main(int arcg, char** argv) { m_process = a; m_process(); /* indirect call to "a" function, */ // Hello! }

Los punteros de función se usan comúnmente para algún tipo de manejo de eventos en C. Sin embargo, no es su único uso ...


Introduce un tipo de puntero a función, apuntando a una función que no devuelve nada (nulo), sin tomar ningún parámetro y nombrando el nuevo tipo MCB .


Tomemos un ejemplo

typedef void (*pt2fn)(int);

Aquí, estamos definiendo un tipo pt2fn. Las variables de este tipo apuntan a funciones, que toman un número entero como argumento y no devuelven ningún valor.

pt2fn kk;

Aquí, kk es una variable de tipo pt2fn, que puede apuntar a cualquier función que tome un entero como entrada y no devuelva ningún valor.


Typedef define MCB como el tipo de un puntero a una función que no toma argumentos y devuelve void .

Tenga en cuenta que MCB Modes::m_process = NULL; es C ++, no C. Además, en C, typedef realmente debería ser typedef void (*MCB)(void); .

No estoy seguro de lo que quiere decir con "la memoria fue liberada". Usted tiene un puntero estático para una función; una función no puede ser liberada. A lo sumo, su puntero se ha restablecido en algún lugar. Solo depure con un reloj de memoria en m_process .