<BR>ore
<BR>Oggi mi e´ capitata una cosa molto strana e ora ve la spiego.<br />
<BR><br />
<BR>Ho una struttura di questo genere<br />
<BR><br />
<BR>typedef struct char_data CHAR_DATA;<br />
<BR><br />
<BR>struct char_data<br />
<BR>{<br />
<BR> CHAR_DATA * next;<br />
<BR> CHAR_DATA * prev;<br />
<BR> CHAR_DATA * next_in_room;<br />
<BR> CHAR_DATA * prev_in_room;<br />
<BR> CHAR_DATA * master;<br />
<BR> CHAR_DATA * leader;<br />
<BR> FIGHT_DATA * fighting;<br />
<BR> CHAR_DATA * reply;<br />
<BR> CHAR_DATA * retell;<br />
<BR> CHAR_DATA * switched;<br />
<BR> CHAR_DATA * mount;<br />
<BR> HHF_DATA * hunting;<br />
<BR> HHF_DATA * fearing;<br />
<BR> HHF_DATA * hating;<br />
<BR> SPEC_FUN * spec_fun;<br />
<BR> MPROG_ACT_LIST * mpact;<br />
<BR> int mpactnum;<br />
<BR> sh_int mpscriptpos;<br />
<BR> MOB_INDEX_DATA * pIndexData;<br />
<BR> int mob_editor;<br />
<BR> DESCRIPTOR_DATA * desc;<br />
<BR> AFFECT_DATA * first_affect;<br />
<BR> AFFECT_DATA * last_affect;<br />
<BR> NOTE_DATA * pnote;<br />
<BR> NOTE_DATA * comments;<br />
<BR> OBJ_DATA * first_carrying;<br />
<BR> OBJ_DATA * last_carrying;<br />
<BR> ROOM_INDEX_DATA * in_room;<br />
<BR> ROOM_INDEX_DATA * was_in_room;<br />
<BR> PC_DATA * pcdata;<br />
<BR> DO_FUN * last_cmd;<br />
<BR> DO_FUN * prev_cmd; /* mapping */<br />
<BR> void * dest_buf; /* This one is to assign to differen things */<br />
<BR> <br />
<BR> eccetera eccetera eccetera
<BR> <br />
<BR> sh_int count; <br />
<BR><br />
<BR>};<br />
<BR><br />
<BR>dove sh_int e´ uno short int giustamente definito.<br />
<BR><br />
<BR><br />
<BR>ed ora il bello<br />
<BR><br />
<BR>- Dichiaro e riempio una struttura di CHAR_DATA<br />
<BR>- ne tiro fuori uno con un ciclo for<br />
<BR><br />
<BR>CHAR_DATA *ch;<br />
<BR>CHAR_DATA *ch_next;<br />
<BR><br />
<BR>for ( ch = first_char; ch; ch = ch_next )<br />
<BR>{<br />
<BR>ch_next = ch->next;<br />
<BR><br />
<BR> <br />
<BR>
<BR>/* all´interno di una funzione ho questo if */<br />
<BR>
<BR>if ( ---ch->count <= 0 )<br />
<BR>
<BR>{<br />
<BR>
<BR> /* blblbl */<br />
<BR>
<BR>}<br />
<BR><br />
<BR>}<br />
<BR><br />
<BR><br />
<BR>quel --ch->count dovrebbe decrementarmi il contatore count, elemento della struttura ch ?<br />
<BR>quell´if e´ equivalente a if ( ( ( ch->count -= 1 ) + 1 ) <= 0 ) ?<br />
<BR><br />
<BR>quel --ch->count, seguendo con vari metodi il codice, va a
<BR>decrementare tutt´altro che ch->count
<BR>elemento intero ( non short int ) di un´altro elemento della struttura
<BR>CHAR_DATA, cioe´ un macello
<BR>Il fatto e´ che per il gcc quelle due forme sono equivalenti (un
<BR>semplice make non va a ricreare il file .o dal sorgente .c )....
<BR>provare per credere.<br />
<BR>Qualcuno mi spiega il motivo?<br /><br>

