2010-02-04 6 views

Respuesta

3

Aquí hay un truco:

// hack.c 
int last_exit; 

// hack.h 
extern int last_exit; 
#define exit(x) (exit)(last_exit = (x)) 

no funcionará para return, pero, bueno, es portátil!

En una nota más fácil de mantener, es posible que desee considerar escribir algún tipo de envoltorio para hacer algo similar a esto para usted. Hackear cómo GCC implementa exit() suena como una pesadilla de mantenimiento. Es mejor escribir algunas funciones auxiliares que salgan por ti, y tal vez incluso enmascararlas con macros si te gusta ese tipo de cosas. Con una macro, incluso puede reemplazar las llamadas return, si siempre llama al return con paréntesis. Aunque esto suena como una pesadilla de mantenimiento aún más.

+0

Gracias. Sí configurando mi propio global antes de llamar a exit() y usarlo en mi func registrado parece ser la mejor idea. –

+0

Recuerde el paréntesis alrededor de 'exit' en la macro: se aseguran de que la macro no intente llamarse a sí misma, pero permite que la macro llame a una función del mismo nombre. Solo recientemente aprendí ese truco, pero te permite evitar que tu hack sea claramente obvio con algo como '#define EXIT (x) exit (last_exit = x)'. Todas las mayúsculas son feas. –

+1

Se recomienda un conjunto adicional de paréntesis alrededor de '(x)' en la definición de macro. – caf

0

Es posible que desee utilizar on_exit. Esto está en desuso, y esto no es Posix, pero al menos está en glibc.

Cuestiones relacionadas