PDA

View Full Version : [C] Adler-32 - Espressione in #define


Hil-X
01-08-2011, 21:22
Ciao! Sto curiosando l'algoritmo perché sto studiando i vari metodi per effettuare il controllo degli errori. Il modo in cui agisce l'ho compreso, ma ho difficoltà in una parte del sorgente. Mi aiutereste gentilmente a capire il comportamento della seguente espressione?

#define DO1(buf, i) {adler += (buf)[i]; sum2 += adler;}
#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1);
#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2);
#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4);
#define DO16(buf) DO8(buf,0); DO8(buf,8);

funz(const char *buf, ...)
{
...

DO16(buf);
}

Il buf dovrebbe essere quindi un vettore di n elementi di tipo char (un byte) che serve per contenere un blocco di dati. Richiamando DO16(buf) non capisco cosa succeda precisamente. Sembra un metodo ricorsivo, ma perché usare i #define piuttosto che una funzione (in teoria più efficiente)?

Altrimenti, dove posso trovare maggiore documentazione sull'algoritmo? La documentazione scarseggia (anche sul sito del programmatore stesso).