diferencia entre typedef y define

Posible duplicado:
Es typedef y # define lo mismo en c?
Confundido por #define y typedef

¿Hay alguna diferencia entre lo siguiente?

#define NUM int ... NUM x; x = 5; printf("X: %d\n", x); 

Y esto:

 typedef int NUM; ... NUM x; x = 5; printf("X : %d\n", x); 

Ambas pruebas se comstackn y se ejecutan sin problemas. Entonces, ¿son equivalentes?

Gracias.

Hay una diferencia cuando desea crear un alias de un tipo de puntero.

 typedef int *t1; #define t2 int * t1 a, b; /* a is 'int*' and b is 'int*' */ t2 c, d; /* c is 'int*' and d is 'int' */ 

Además, typedef obedece las reglas de scope, es decir , puede declarar un tipo local a un bloque.

Por otro lado, puede usar #define cuando quiera administrar su tipo en una directiva de preprocesador.