Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di inc40
    Registrato dal
    Sep 2004
    Messaggi
    319

    [C++] (Ri)dichiarazione variabili

    Salve,
    ho queste curiosità, se io scrivo una cosa del genere:
    codice:
    int i=0;
    while(i<3){
    char a;
    int b;
    
    // istruzioni con "a" e "b"
    
    i++;
    }
    1) Le variabili "char a" e "int b" quante volte vengono dichiarate?
    2) Ad ogni iterazione del ciclo while, come vengono trattate (re-inizializzazione, ...) ?

    Grazie
    Gli uomini, non avendo potuto guarire la morte, la miseria, l'ignoranza, hanno risolto, per vivere felici, di non pensarci.

  2. #2
    1) Vengono dichiarate una volta, ma ad ogni iterazione è come se fossero variabili nuove.
    2) Se non le inizializzi, teoricamente ad ogni iterazione valgono un valore indefinito.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    Ah... io ero convinto che venissero ridichiarate ogni volta :S

    Perciò anche se si trovano all'interno di un while vengono allocate una sola volta giusto?
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  4. #4
    Come funzionino all'atto pratico le cose dipende dal compilatore; con ogni probabilità buona parte dei compilatori incrementeranno lo stack pointer prima dell'inizio del while (allocando così le due variabili) e lo decrementeranno solo alla fine di tutte le iterazioni del while, ma l'idea del linguaggio è che quelle variabili sono locali di quel blocco, in cui ad ogni iterazione si entra e si esce. Di conseguenza è come se fossero sempre variabili "nuove".
    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 © 2024 vBulletin Solutions, Inc. All rights reserved.