UINT16 dice esattamente di che tipo si tratta. Credo tra l'altro che sia una definizione fatta in qualche header in Windows
esatto,quindi con una bella #ifdef posso stabilire se includere l'header di windows o il mio non modificando il codice ed usando la stessa tipologia di parametri.
Ma non è detto che per altri sia così no?
Come ho già ripetuto è tutto molto personale,e per me che sbalzo da windows a linux è piu semplice usare quella tipologia rispetto al classico int,come lo sarà per tutti quelli che fanno come me e altresi sarà piu complicato per chi conosce solo linux.Da notare comunque che la dicitura INT16 è molto incisiva,mica crederai che siano 16 interi?
Non si obbliga un altro utente ogni volta a tornare in cima al programma per vedere cosa è per esempio INT16?
No ed è proprio lo scopo delle typedef ed altre strategie.
Generalmente uno legge il reference e poi inizia a programmare,ma se non hai niente che ti aiuti dovrai sempre ritirare fuori il manuale per guardarti cosa fa quella determinata funzione.
Ad esempio il prototipo:
è molto esplicito,e a mio avviso quel const non è stato messo li tanto per la sicurezza ma piu che altro per capire al volo cosa fa la funzione.Il nome copia stringa mi lascia capire che copio due vettori di caratteri,ma qual'è il source e il dest? ovvio quello col const non lo posso modificare e quindi sarà per forza il source e l'altro il dest.
Torniamo alla typedef con i puntatori a funzione.
Codice: Seleziona tutto
int newtimer(const int,void(*tmrprc)(int,int,int,int));
Cosa capiresti di una funzione cosi?
e se la riscrivo cosi:
nel secondo esempio è facile capire che la funzione restituisce un valore che identifica il timer e gli debbo passare un intero costante che si presupponga sia l'intervallo e una funzione di callback usata dal timer.
Come noterai sia il primo esempio che il secondo obbligano nel dover conoscere la funzione di callback cosa faccia.Solo che il secondo è piu significativo almeno per uno che abbia già letto il reference ma non si ricordi bene che parametri richieda la funzione.(Ricordo che tutti gli ide aiutano col visualizzare il prototipo di una funzione,cosa importantissima perchè io ad esempio non ho molta memoria e ricordarmi 10000 tipi di funzioni non ce la faccio.)
ecco un frammento dell'header che gestisce i miei thread sotto linux,(__THR è definito nel file .c e non nell'header in modo da essere offuscato)
Codice: Seleziona tutto
typedef struct __THR* THR;
typedef PVARIANT (*THRCALL)(PVARIANT);
THR thr_new(THRCALL thrcall,UINT32 stksz,WORD runsuspend);
sotto windows mi basterà modificare solo il puntatore della funzione ovvero:
Come vedi le typedef sono obbligatorie in questo caso anche con le strutture perchè THR è si una struttura però non posso accedervi e pertanto è stilisticamente orrendo scrivere "struct __THR*" e poi sapere che non vi si può accedere.
Non sei obbligato ad usarle,volevo solo accennartele,vedrai che tanto piu avanti le amerai.