Pagina 1 di 1

[C]Compatibilità dei puntatori

Inviato: domenica 31 gennaio 2016, 17:05
da Dclaudio1990
M_A_W_ 1968 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4848540#p4848540][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Si tratta di un ottimo testo, da leggere e meditare con molta calma per la sua profondità, nascosta dietro una apparente semplicità espositiva. Il suo potenziale deflagrante è molto più elevato di "C traps and pitfalls", capostipite di quella serie di testi.

Due puntatori si dicono compatibili quando si può assegnare direttamente l'uno all'altro senza alcun problema e senza cast intermedi o nascosti. In particolare, è chiaro che devono avere esattamente il medesimo passo di incremento in aritmetica dei puntatori, e quindi puntare ad oggetti di tipi compatibili. La definizione è vagamente ricorsiva, ma molto chiara.

Ricordate bene che tutto il sistema dei tipi del C (e dei macroassembler) ruota unicamente attorno a questo concetto: quanti bytes occupa un dato di tipo X o Y, e di quanto si deve incrementare/decrementare il puntatore per puntare al successivo/precedente in un array. E tutto ciò è gestito al 99% a tempo di compilazione, generando apposite costanti e idiomi adeguati. Nulla di tutto ciò traspare a runtime, nel binario, ove si vedono solamente incrementi costanti di registri e di indirizzi in modo indiretto.

Anche per questi motivi qualcuno ha avuto la pessima idea di introdurre RTTI in C++ , che qualcun altro ha prontamente preso a calci nel deretano denunciandone l'orrendo peso in temini di potenza di calcolo quando qualche sprovveduto ha iniziato a ventilare l'idea di usare quel ciarpame anche in sistemi non mainstream.
Grazie mille per la risposta.
Della profondità del testo me ne sto rendendo conto piano piano.
A ogni capitolo deve seguire per forza qualche giorno di meditazione per capire cosa hai effettivamente appreso.
Nel esempio da me portato però non capisco l'incompatibilità tra BAZ2 e FOO2, visto che l'operando sinistro a tutte le caratteristiche dell'operando destro.
Sto uscendo pazzo con questi puntatori :muro:
:ciao: