Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Errore G++ 4.5.2!

  1. #1

    Errore G++ 4.5.2!

    Ciao a tutti.
    Ho Linux Mint 11 installato sul mio computer e con G++ programmo in C++.
    La versione di GCC installata è la 4.5.2 e mi da il seguente problema: se stampo quelcosa prima di un ciclo, eseguo il ciclo, e stampo quelcosa dopo di esso...stampa tutto dopo il ciclo...

    ad esempio questo codice fa aspettare dei secondi per poi stampare "iniziofine" insieme
    codice:
    #include<iostream>
    #include<limits.h>
    using namespace std;
    int main(void)
    {
        cout << "inizio";
        for(int i=0;i<INT_MAX;i++);
        cout << "fine";
    }
    E' un problema di G++ o qualcosa mi sfugge? ...e siccome la versione 4.5.2 non è l'ultima versione, perchè sull'update manager non ci sono aggiornamenti? Posso aggiornare la versione nuova facendo si che si autoaggiornerà?
    Grazie

  2. #2
    Il programma funziona correttamente, l'IO C++ è bufferizzato, per cui il buffer di scrittura viene svuotato sulla console solo quando è pieno, quando viene chiesto dell'input su cin e quando viene forzato manualmente il flush. Nel tuo codice nessuna di queste condizioni si verifica, per cui tutto l'output avviene alla fine.
    Per risolvere, inserisci un cout.flush() prima del ciclo.
    In ogni caso, i cicli for per le pause non si usano sui PC normali, perché non bloccano per un tempo determinato e sprecano un sacco di CPU. Usa piuttosto le syscall POSIX sleep o usleep.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    grazie quella del buffer non la sapevo...e su windows lo stesso programma funziona si comporta in modo diverso (stampando prima del ciclo)
    comunque quel for inutile era solo per fare l'esempio

  4. #4
    Originariamente inviato da fasterrr
    grazie quella del buffer non la sapevo...e su windows lo stesso programma funziona si comporta in modo diverso (stampando prima del ciclo)
    Probabilmente in tal caso viene usato un buffer molto piccolo, oppure viene disabilitato il buffering su console. È nelle facoltà dell'implementatore della libreria standard fare queste scelte.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.