2013-02-23 12 views
5

Qual è la differenza tra i due funzioni che sono definite nell'intestazione conio.h file-Differenza tra getch() e _getch()

getch() e _getch().

C'è una differenza nella decalarazione? O è semplicemente una differenza dovuta agli standard aggiornati?

risposta

2

Entrambe queste funzioni sono non standard (vale a dire non sono nello standard ISO C++). Sono estensioni fornite dalla tua particolare toolchain e, come tale, devi controllare le differenze nella sua documentazione.

7

Fa parte di una decisione di Microsoft un paio di anni fa interpretare lo standard C++ in modo più rigido. Dice che tutti i nomi nello spazio dei nomi globale che iniziano con un carattere di sottolineatura sono riservati per l'uso dall'implementazione. Ciò significa che getch non è un nome riservato, ma è _getch.

Quindi Microsoft ha capito che "questa funzione, e ogni altra funzione POSIX, è fornita dall'implementazione. Rinominiamoli anteponendo un trattino basso, quindi siamo in grado di tenerlo all'interno della parte" riservata "del namespace globale In questo modo, non ci sono possibilità di scontri tra nomi e funzioni fornite dall'utente

Si potrebbe dire che queste sono buone intenzioni o che si tratta solo di un tentativo malvagio di violare il codice POSIX. la vera motivazione era, ma il risultato finale è che, secondo Microsoft, getch è deprecato, e dovresti usare invece _getch.

+0

'+ 1' per una bella spiegazione dello sfondo –

+0

Che tipo di codice POSIX sarebbe stato rotto? POSIX 'getch()' è una parte di 'curses', quindi qualsiasi codice POSIX che si basi su' getch() 'avrebbe comunque bisogno di una porta di' curses'. –

+0

17.4.3.1.2 Nomi globali 1 Alcuni set di nomi e firme di funzione sono sempre riservati all'implementazione: - Ogni nome che contiene una doppia sottolineatura (__) o inizia con un trattino basso seguito da una lettera maiuscola (2.11) è riservato all'implementazione per qualsiasi utilizzo. E questo non si applica a _gecth. – Paul