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
.
'+ 1' per una bella spiegazione dello sfondo –
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'. –
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