Função pilha não imprime

,

Bom dia a todos, criei esse código, porem ao executar a pilha não esta imprimindo apenas mostrando o topo.

#include<stdio.h>
#include<stdlib.h>
#define MAX 100

typedef int 

	tp_func;

typedef struct {
	
	int topo;
	
	tp_func func[MAX];
	
}tp_pilha;

tp_pilha pilha;

void inicializa_pilha(tp_pilha *f){
	f-> topo =-1;
}

int pilha_vazia(tp_pilha *f){
	if(f->topo ==-1);
	return 1;
	return 0;
	
}

int pilha_cheia(tp_pilha *f){
	
	if(f-> topo == MAX-1)
	return 1;
	return 0;
	
}

int pilha_push(tp_pilha *f, tp_func c){
	if(pilha_cheia(f))
	return 0;
	
	f->topo++;
	f -> func[f->topo] = c;
	
	return 1;	
}


int pilha_pop(tp_pilha *f, tp_func *c){
	if(pilha_vazia(f))
	return 0;
	
	*c = f->func[f->topo];
	f-> topo--;
	
	return 1;
	
}

int pilha_topo(tp_pilha *f, tp_func *c){
	if(pilha_vazia(f))
	*c = f->func[f->topo];
}

void imprime_pilha(tp_pilha f){
	tp_func c;
	while(!pilha_vazia(&f)){
		pilha_pop(&f, &c);
		printf("%d", c);
	}
	
}
int main(){
	
	tp_pilha pilha;
	
	tp_func c;
	
	inicializa_pilha(&pilha);
	pilha_push(&pilha, 5);
	pilha_push(&pilha, 9);
	pilha_push(&pilha, 3);
	pilha_push(&pilha, 1);
	pilha_push(&pilha, 0);
	

	
	printf("%d", pilha.topo);
	
	imprime_pilha(pilha);
	
	
}

n

#include<stdio.h>
#include<stdlib.h>
#define MAX 100

typedef int

tp_func;

typedef struct {

int topo;

tp_func func[MAX];

}tp_pilha;

tp_pilha pilha;

void inicializa_pilha(tp_pilha *f){
f-> topo =-1;
}

int pilha_vazia(tp_pilha *f){
if(f->topo ==-1) //Retirei o ; do if
return 1;

return 0;	

}

int pilha_cheia(tp_pilha *f){

if(f-> topo == MAX-1)
return 1;
return 0;

}

int pilha_push(tp_pilha *f, tp_func c){
if(pilha_cheia(f))
return 0;

f->topo++;
f -> func[f->topo] = c;

return 1;	

}

int pilha_pop(tp_pilha *f, tp_func *c){
if(pilha_vazia(f))
return 0;

*c = f->func[f->topo];
f-> topo--;

return 1;

}

void pilha_topo(tp_pilha *f, tp_func *c){ //Passei de int para void
if(pilha_vazia(f))
*c = f->func[f->topo];
}

void imprime_pilha(tp_pilha f){
tp_func c;
while(!pilha_vazia(&f)){
pilha_pop(&f, &c);
printf("%d ", c);
}

}
int main(){
// Retirei o tp_func c; porque não havia funcionalidade.
tp_pilha pilha;

inicializa_pilha(&pilha);
pilha_push(&pilha, 5);
pilha_push(&pilha, 9);
pilha_push(&pilha, 3);
pilha_push(&pilha, 1);
pilha_push(&pilha, 0);
	
printf("%d", pilha.topo);

imprime_pilha(pilha);
	
return 0;

}