Originariamente inviato da BabboNapoli
Perchè dici di evitare il system pause? Per informazione eh intendiamoci
Perché non puoi essere sicuro di cosa fa esattamente. Lo standard prescrive che la system passi il tuo comando ad un interprete dei comandi, di cui non sai niente. Su Windows sarà - probabilmente - cmd.exe (quale versione? a seconda cambiano diverse funzionalità) o command.com (di nuovo, quale versione?), su Linux/Unix in genere sarà sh (quale versione?) ma - per quanto riguarda lo standard C++ - nulla impedisce che sia bash, ksh tcsh o chissà quale altra shell. Quello che funziona sulla shell che hai su questa particolare versione di Windows non è detto che funzioni con una versione più vecchia o più nuova, figuriamoci poi su Linux o altri sistemi operativi (esempio facile: su Linux se provi ad inserire il classico PAUSE in sh ottieni:
codice:
$ pause
sh: pause: not found
).
Per farla breve: non hai nessuna garanzia su come verrà interpretato il tuo comando.

Inoltre, non hai nessun codice di ritorno standard che ti dice se il comando è stato eseguito con successo: lo standard non dice niente a proposito, per cui si naviga ancora nell'unspecified behavior.

Tra l'altro richiamare system per fare queste piccole operazioni è uno spreco anche dal punto di vista delle risorse, dato che vai ad avviare un nuovo processo per fare un'operazione che potresti fare direttamente da dentro il tuo programma, a costo infinitesimo. Oltre al costo del nuovo processo (che nella maggioranza dei casi è molto ridotto) l'avvio di un nuovo processo da parte di un programma sconosciuto è spesso causa di avvertimenti da parte di suite di sicurezza, motivo in più per evitare la system.

Alcuni poi usano system per avviare altri processi - pessima idea, su cui ho scritto un'altra risposta.