Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di felpone
    Registrato dal
    Jun 2010
    Messaggi
    182

    [C] variabile non inizializzata

    Se ho questo codice:

    codice:
    
    int j;
    
    int j+=10;
    avrò un undefined behavior?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Così avrai un errore ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    Con un codice del genere rischi di trovarti un output strano durante alcune (rare) esecuzioni del programma.
    A seconda dei flag che passi al compilatore puoi ricevere dei warning: warning: ‘j’ is used uninitialized in this function
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Io penso che con quel codice avrà un errore del tipo

    int j : redefinition
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Supponendo invece che la domanda fosse:
    codice:
    int j;
    j+=10;
    non si tratta di undefined behavior (=può succedere qualunque cosa), ma semplicemente il suo valore non è determinato:
    If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate.
    (C99, §6.7.8 ¶10)
    Quello che poi succede nella pratica è che in genere assumerà qualunque valore sia rimasto sullo stack nella locazione di memoria che gli viene assegnata (anche se alcuni compilatori nelle build di debug inizializzano automaticamente ogni stack frame ad un valore "strano", in modo che errori di questo genere saltino subito all'occhio anche quando non risulta possibile diagnosticare il problema al momento della compilazione)
    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.