2013-04-30 10 views
15

Sto prendendo il mio primo sguardo nell'API di Windows e quando ho incontrato WNDCLASSX non ho potuto fare a meno di chiedermi perché il suo membro, cbSize, esistesse. La descrizione di cbSize, per MSDN è: la dimensione, in byte, di tale struttura. Impostare questo membro su sizeof (WNDCLASSEX). Assicurarsi di impostare questo membro prima di chiamare la funzione GetClassInfoEx. Questo lo descrive e suggerisce il suo scopo, ma non intendo la necessità.Perché una struttura può memorizzare le proprie dimensioni?

La mia domanda è questa: perché una struttura deve mai memorizzare le proprie dimensioni? Nessuna funzione che gestisce la struct può accedere a tali informazioni usando sizeof?

+0

La mia ipotesi: convincere. Inoltre, l'efficienza è molto più efficiente per eseguire sizeof (qualcosa) una volta e memorizzarlo, quindi utilizzarlo più e più volte, piuttosto che eseguire sizeof ripetutamente. –

+1

'do_something_with ((struct foo *) i_am_a_bar_ptr);' –

+0

versione-assist e piattaforma della macchina sono due motivi comuni. – WhozCraig

risposta

22

Le versioni successive dell'API di Windows possono aggiungere nuovi campi alla struttura. Se la struttura ha una dimensione, il codice precedente può chiamare la funzione API, che copia solo i campi di cui il vecchio codice è a conoscenza.

+7

Forse WinAPI ha fatto qualcosa di giusto stavolta. :) –

Problemi correlati