Problema al compilar en codeblocks con ubuntu 12.04

Imagen de merinos
0 puntos

Hola a todos y muchas gracias por estar leyendo mi post.

Estoy realizando un programa en C con listas enlazadas, y al compilar me salen errores que no me salian al compilarlo en windows xp 64 bit con el mismo programa. Os pongo los problemas que me salen al compilar:

aviso: el tipo de devolucion de 'main' no es 'int' [-Wmain]
aviso: declaracion implicita d ela funcion 'getche' [-Wimplicit-function-declaration]
aviso: declaracion implicita de la funcion 'toupper' [-Wimplicit-function-declaration]

El codigo es el siguiente:

#include <stdio.h>
#include<stdlib.h> /*malloc()*/
#include <string.h> /*strcmp()*/
struct cliente
{
char nombre[20];
char apellidos[30];
unsigned long int telefono;
struct cliente *siguiente;
};
typedef struct cliente NODO;
NODO* ReservaNuevoNodo(void);
void IntroducirDatos(NODO* elemento);
NODO* InsertaPorApellidos(NODO* inicio, NODO* elemento);
NODO* BorraPorApellidos(NODO* inicio, char buscado[20]);
void ImprimeLista(NODO *inicio);
void BorraLista(NODO *inicio);
NODO* CargaFichero(void);
int GrabaLista(NODO* inicio);
void BuscarTelefono(NODO* inicio);
/*void BuscarRepetidos(NODO* inicio);*/
void main()
{
NODO *inicio=NULL; /* la lista está inicialmente vacía */
NODO *nvo_elemento; /* para introducir un elemento nuevo en la lista */
char opcion; /* opcion del menu: insertar, borrar, etc */
char cadena[20]; /* guarda el apellido a buscar en lista */
char grabar; /* para grabar o no al salir del programa */
while(opcion!='S')
{
printf("\n\n\n\n");
printf("C. Cargar lista de un fichero\n");
printf("V. Visualizar toda la lista\n");
printf("X. Borrar la lista\n");
printf("I. Insertar elemento por apellidos\n");
printf("B. Borrar elemento por apellidos\n");
printf("G. Grabar la lista en un fichero\n");
printf("T. Buscar un numero de telefono\n");
/*printf("R. Buscar apellidos repetidos\n");*/
printf("S. Salir\n");
fflush(stdin); /*para vaciar el buffer y evitar problemas al guardar variables*/
opcion=getche(); /*con getche mas comodo: no tengo que dar return*/
opcion=toupper(opcion); /*pasa a mayúscula*/
printf("\n\n\n");
switch(opcion)
{
case 'C':
inicio=CargaFichero();
break;
case 'V':
ImprimeLista(inicio);
break;
case 'X':
BorraLista(inicio);
inicio=NULL;
break;
case 'I':
nvo_elemento=ReservaNuevoNodo();
IntroducirDatos(nvo_elemento);
inicio=InsertaPorApellidos(inicio, nvo_elemento);
break;
case 'B':
printf("Apellidos a borrar: \n");
fflush(stdin);
gets(cadena);
inicio=BorraPorApellidos(inicio, cadena);
break;
case 'G':
printf("Grabando lista");
GrabaLista(inicio);
break;
case 'T':
BuscarTelefono(inicio);
break; /*hacer función buscar telefono para que muestre por pantalla de quien es el número*/
}
}
printf("Desea Grabar los cambios realizados? (s/n)");
fflush(stdin);
scanf("%c",&grabar);
if(grabar=='s' || grabar=='S') GrabaLista(inicio); /*No hace falta llaves para una sola instrucion dentro de un bucle*/
return;
}/*fin del bucle principal (main)*/

He omitido las funciones ya que no dan ningun tipo de error.

No se si sera tema de configuracion, pero me parecen errores bastante raros.

Muchas gracias.