Newsgroup: it.comp.lang.c
Titolo: Ciclo for con post incremento o pre incremento?

Ciao,
Tempo fa qualcuno, di cui non ricordo il nic, ha scritto su un thread di 
preferire, nei cicli for, il pre incremento dell'indice invece che il 
post incremento.
Adesso mi sto studiando la struttura interna del DSP della Texas 
TMS320F2833x, e mi sono imbattuto nella ARAU (Auxiliary Register 
Aritmetic Unit) la quale puo' effettuare delle operazioni sui registri, 
anche se utilizzati per l'indirizzamento indiretto della memoria nello 
stesso ciclo di accesso alla memoria stessa, e indipendenti dalla ALU 
principale.
Le funzioni della ARAU possono essere: "predecrement, postincrement, 
index addition and subtraction, stack relative operation, circular 
addressing and bit-reverse addressing with additional options".
Premesso cio', da quello che ho capito, il post incremento di un 
registro utilizzato ad esempio per puntare alla memoria o anche come 
semplice contatore, viene eseguito in un ciclo "trasparente" e senza 
occupare l'ALU principale, mentre se voglio fare un pre incremento, il 
compilatore e' costretto ad aggiungere del codice per effettuare 
l'operazione aggiungendo, quindi, spazio e cicli di esecuzione.
La domanda quindi, rivolta a chi preferisce il preincremento 
dell'indice, e': perche'?
Quali vantaggi porta un simile stile di codifica?
A me pare porti degli svantaggi in termini di spazio/velocita', pero' 
vorrei conoscere le motivazioni/vantaggi dell'altra soluzione.
Sperando di essere stato abbastanza chiaro,
Ciao
Giuseppe

 Quali vantaggi porta un simile stile di codifica?
[...]
Credo ci sia un equivoco: il preincremento o postincremento nella
sintassi del linguaggio C non ha in alcun modo a che fare con il pre o
post incremento di un valore immagazzinato in un registro. Nulla nello
Standard C fa riferimento al modo in cui un post o pre-incremento di
una variabile debba essere implementato, e questo è completamente
'implementation defined', il che vuol dire che dipende da com'è stato
implementato il compilatore. Il postincremento di una variabile in C
potrebbe non coincide necessariamente con il "postincremento di un 
registro".
Non bisogna confondere le operazioni macchina sui registri con le
operazioni sulle variabili in C, queste non coincidono necessariamente
(tenderei a dire che non coincidono mai), e si tratta per lo più di
operazioni su valori immagazzinati in memoria. E anche laddove non ci
sia una memoria, un'addizione in C non deve coincidere per forza con
la generica istruzione "add" in assembly (magari lo fa, ma non è 
rischiesto).
A meno che sia dichiarato dall'implementazione, non vedo alcun vantaggio,
in generale, nel pre o post incremento di un indice nel ciclo for,
entrambi sortiscono lo stesso effetto.
-- 
Non puoi insegnare qualcosa ad un uomo. You cannot teach a man anything.
Lo puoi solo aiutare   --  Galileo  Galilei  --   You can only help him
a scoprirla dentro di sé.                        discover it in himself.
Vincenzo Mercuri

 dell'indice, e': perche'?
È una architettura particolare pensata proprio per ottimizzare gli 
algoritmi di calcolo numerico quindi aggiunge in hardware delle comodità 
sapendo a priori che un ciclo numerico sarà utilizzato molto spesso.
Come ti hanno detto non c'entra con lo stile che si preferisce in C e 
dell'ottimizzazione per quella architettura specifica dovrebbe occuparsi 
il compilatore o tu dovresti usare le librerie ottimizzate che ti 
fornisce il produttore che hanno già le istruzioni disposte in modo 
ottimo.