Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565

    C - Perchè una struttura deve conoscere la propria grandezza?

    In varie strutture delle API di win32, molte volte vi è un dato membro chiamato size che indica la grandezza della struttura, e, di solito è sufficiente scrivere sizeof(struttura)
    ma perchè dobbiamo specificare proprio noi la grandezza della struttura? non può essere...autodeterminante? ossia questo sizeof non se l
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  2. #2
    Quel membro delle strutture ha ragione di essere per più motivi; innanzitutto tu passi alle API un puntatore a struttura, per cui non possono ricavare le dimensioni della struttura in questione. Inoltre in base alla dimensione molte funzioni sono in grado di capire se i puntatori in essa contenuti sono a 16, 32 o 64 bit. Ad ultimo, le strutture in un prossimo futuro potrebbero essere ingrandite aggiungendo nuovi membri, per cui le API in base alla dimensione potranno determinare quale versione della struttura si sta passando.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    questo ok ma continua a non quadrare...Mettiamo questo esempio

    codice:
    WNDCLASSEX wc;
    wc.size = sizeof(WNDCLASSEX);
    //altri parametri
    
    RegisterClassEx(&wc);
    Invece di fare in questo modo non potrebbe fare da solo cosi...

    codice:
    WNDCLASSEX wc;
    //parametri
    RegisterClassEx(&wc);
    e poi nella funzione RegisterClassEx
    codice:
    ATOM RegisterClassEx(WNDCLASSEX *ppWc)
    [
      int size = sizeof(WNDCLASSEX);
    
    ]
    Oppure invece di fare int size fa quello che gli pare....
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  4. #4
    L'operatore sizeof viene valutato al momento della compilazione, per cui in RegisterClassEx restituirebbe le dimensioni dell'ultima versione della struttura con puntatori a 32 bit, mentre magari l'applicazione chiamante è stata compilata con una versione precedente della struttura.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Originariamente inviato da MItaly
    L'operatore sizeof viene valutato al momento della compilazione, per cui in RegisterClassEx restituirebbe le dimensioni dell'ultima versione della struttura con puntatori a 32 bit, mentre magari l'applicazione chiamante è stata compilata con una versione precedente della struttura.

    Aaaah ecco adesso quadra...
    Il codice con RegisterClassEx, anche se la struttura variasse, porterebbe sempre lo stesso numero di bytes
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  6. #6
    Utente di HTML.it L'avatar di Xadoom
    Registrato dal
    Dec 2002
    Messaggi
    1,491
    Mitici, da sempre mi sono posto lo stesso quesito pensando non ci fosse un motivo preciso....
    Windows Xp
    [Java]
    [PHP]Notepad++
    [Fortran90-77] elf90 g77
    [C++ /WinAPI] DevC++ VisualC++

  7. #7
    Originariamente inviato da XWolverineX
    Aaaah ecco adesso quadra...
    Il codice con RegisterClassEx, anche se la struttura variasse, porterebbe sempre lo stesso numero di bytes
    Esatto.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Che geni che sono...
    io per utilizzare le api sto morendo e loro vanno a pensare ste cose...
    avessi un decimo della loro sapienza col C
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  9. #9
    Be', anche nelle API ci sono dei begli obbrobri... in quelle della shell in particolare (vedi ShellExecute).
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Perchè, cosa ha che non va
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

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.