Come dicevo sopra, buttalo sto libro
La dichiarazione main() non può funzionare su nessun compilatore decente (non ne conosco uno che non ti dia per lo meno un warning), e su una architettura standard.
In generale, se vuoi approfondire dai un'occhiata al capitolo
5.1.2.2.1 dello standard C
5.1.2.2.1 Program startup
The function called at program startup is named main. The implementation declares no
prototype for this function. It shall be defined with a return type of int and with no
parameters:
int main(void) { /* ... */ }
or with two parameters (referred to here as argc and argv, though any names may be
used, as they are local to the function in which they are declared):
int main(int argc, char *argv[]) { /* ... */ }
or equivalent;10) or in some other implementation-defined manner.
Oltre a questo si può dire che esisterebbe anche la possibilità di dichiarare un main come
void main (void)
Su applicazioni embedded dove un main non torna mai al codice di startup (super-loop).
Penso che questi siano discorsi che puoi evitare di comprendere per ora, limitati a quello che dice lo standard.
Inoltre considera che definire delle funzioni come () senda specificare void, del tipo
void foo()
è molto pericoloso e deprecato dal c90.
Ultima cosa: per intercettare questo tipo di errori, visto che siamo nel 2017, cerca sempre di compilare con uno standard aggiornato e un compilatore aggiornato.
Per esempio se usi
gcc puoi aggiungere sempre l'opzione
-std=c11 per compilare secondo lo standard che ti ho linkato all'inizio del post.
Spero di non averti scogl....stancato troppo. Buon lavoro