Exactamente.
Si lo usas con void
void main() {
tu programa
}
Como puedes ver, no tienes que poner return 0; porque si lo pones te dirá eso del error, que no debe devolver un entero.
Void quiere decir que no devuelve nada.
Yo, como dicen arriba, te recomiendo usarlo asi:
int main(){
tu programa
return 0;
}
INT en este caso esta diciendole que "main" tiene que devolver un entero.
Devolvera 0 (entero) cuando todo salga bien. Si entre medias pones alguna funcion para detectar errores puedes ponerle "return 1" (donde uno puede ser lo que quieras, hasta una variable que contenta un entero) para identificar el error.
Imaginate que usas un programa para meter datos por teclado. Un dni, por ejemplo.
El programa te pide el nombre, apellidos, y año. Si en el nombre le metes un numero el programa lo detecta y devuelve un error haciendo que el programa retroceda o, por ejemplo, detener la ejecucion del programa y que devuelva un 1. El programa padre que es el que ha mandado ejecutar esta funcion o programa ve un 1 y, por ejemplo, con un switch() en el caso de que sea 1 que haga una cosa, por ejemplo que printee "El nombre no puede contener numeros". Luego, para los apellidos haces un codigo igual, solo que en vez de devolver 1 que devuelva 2 y el programa padre detectara el 2 y diras dentro del switch() en el caso de que sea 2 que printee "error al introducir los apellidos", y asi con todo.
Si usas un programa con funciones, o para llamar a otros archivos viene muy bien para ordenar tu codigo y saber en que parte esta fallando el programa.
En muchos codigos veras que cuando vas a usar alguna funcion que es vitable para que el resto del programa funcione lo ponen asi:
#include <stdio.h>
int funcion(void);
int main(){
if(funcion()!=0){
printf("Error al hacer algo en funcion()"); }
// Este else hace referencia a lo que sea distinto de arriba, es decir a lo que
// sea igual a cero, que en este caso es lo correcto :)
else {
printf("TODO ha salido correctamente, podemos seguir"); }
}
int funcion(void){
// tu funcion y tus condicionantes, si en un sitio detectas un error por ejemplo al
// introducir un nombre le pones "return 1" y saldra de la funcion sin terminarla.
// al final de la funcion pones return 0 para indicar que todo ha salido correctamente
return 0;
}
Te comento un poco, este programa usa funciones para que sean llamadas desde el programa principal "main". Eso que ves abajo y arriba es una funcion. Lo de arriba es un prototipo que tiene que ponerse si quieres poder usar la funcion en cualquier parte del programa. Al final del programa declaras la funcion, es decir, es como si lo escribieses en el programa principal main y lo llamas desde ahi.
Si te fijas en el main le hemos puesto un condicionante, "Si funcion() es distinto de 0 es que ha habido un error en la ejecucion de la funcion".
Si te fijas, la funcion del prototipo se declara igual que la funcion de abajo. Y tiene
void dentro del parentesis, eso quiere decir que no se le pasa ningun parametro, ninguna variable.
Echale un vistazo a las funciones a a pasarles tipos de datos.
Ya tienes algo más por donde empezar Un saludo.