Si ottiene l'avviso
implicit declaration of function 'getch'
perché non avete includere qualsiasi intestazione che dichiara getch
. Nessuna funzione di questo tipo è dichiarata nelle intestazioni standard <stdio.h>
o <stdlib.h>
.
In realtà, non esiste alcuna funzione denominata getch
in qualsiasi intestazione C standard.
Prima dello standard C99, il linguaggio C consentiva le chiamate alle funzioni senza dichiarazione visibile. Tale chiamata creerebbe di fatto una dichiarazione implicita di una funzione restituendo int
e prendendo argomenti di qualunque tipo (promosso) effettivamente passato.
A seconda di ciò, non è mai stata una buona idea. È necessario sempre avere un'appropriata direttiva #include
per l'intestazione che dichiara qualsiasi funzione di libreria utilizzata nel programma.
C99 cadere la regola "implicita int
" e ha fatto alcuna chiamata a una funzione senza dichiarazione visibile una violazione vincolo, che richiede una diagnosi (che diagnostica viene permesso di essere un errore non fatale.)
Se si sta compilando su Windows, se ricordo correttamente, c'è una funzione getch()
dichiarata in <conio.h>
. Se si desidera utilizzare tale funzione, è necessario aggiungere #include <conio.h>
al programma.
Non consiglio di farlo; l'utilizzo di getch()
non è necessario e rende il programma non portatile. Alcuni ambienti di sviluppo di Windows rendono difficile eseguire "programmi di console" (programmi che stampano su output standard anziché creare una GUI); spesso l'esecuzione di un programma di questo tipo crea una finestra temporanea che viene distrutta non appena termina il programma. Chiamare la funzione standard getchar()
è un altro modo per evitare che la finestra svanisca. Oppure puoi eseguire il programma da un prompt dei comandi e il suo output apparirà nella finestra di comando corrente.
Se si sta compilando su un sistema simile a UNIX, esiste un'altra funzione denominata getch()
, dichiarata in <curses.h>
. Posso compilare ed eseguire il tuo programma su Linux se aggiungo -lcurses
alla riga di comando del compilatore. Ma non dovresti usare la funzione getch()
se non hai prima configurato l'ambiente curses ed è abbastanza chiaro che non vuoi farlo.
Idealmente, il classico "ciao mondo" programma dovrebbe essere solo:
#include <stdio.h>
int main(void) {
printf("Hello world!\n");
return 0;
}
Come si ottiene che a correre e ti permettono di vedere l'uscita dipende dal proprio ambiente (che non ci hanno raccontato) .
'getch()' o 'getchar()'? –
Il 'getch()' non standard è in 'conio.h' (anche non standard), che non hai incluso. Funziona perché il tipo restituito è compatibile con il tipo di ritorno implicito assunto dal compilatore: 'int'. In breve, tu eri (dis) fortunato. Potresti usare ['getchar()'] (http://en.cppreference.com/w/c/io/getchar). – WhozCraig
Grazie @WhozCraig per il tuo commento (se era una risposta che potrei accettare volentieri) –