PDA

View Full Version : [C] Macro non ben identificata


[Kendall]
20-08-2012, 18:47
Salve ragazzi, sto traducendo una libreria scritta in C in un altro linguaggio (due a dire il vero, Java e C#) e fa uso delle tanto odiate (almeno da me) macro.
Io son scafato soprattutto con il C++ e devo ammettere che il C puro comincio un po' a dimenticarlo. Le macro poi son sempre state elementi che non ho approfondito. Fatto sta che nella sfilza di macro che mi son ritrovato di fronte una non riesco a comprenderla. Sapreste tradurmela in una normale funzione?


#define mm_clear_typecode(typecode) ((*typecode)[0]=(*typecode)[1]= \
(*typecode)[2]=' ',(*typecode)[3]='G')


In particolare non riesco a capire quello che viene dopo il " \ ".

typecode per la cronaca è un semplice typedef per un array di 4 char.
typedef char MM_typecode[4];

Grazie mille in anticipo.

edit: La traduzione in funzione semplice non deve essere per forza in C#/Java. Va benissimo anche in C++

sottovento
20-08-2012, 19:37
;37966678']Salve ragazzi, sto traducendo una libreria scritta in C in un altro linguaggio (due a dire il vero, Java e C#) e fa uso delle tanto odiate (almeno da me) macro.
Io son scafato soprattutto con il C++ e devo ammettere che il C puro comincio un po' a dimenticarlo. Le macro poi son sempre state elementi che non ho approfondito. Fatto sta che nella sfilza di macro che mi son ritrovato di fronte una non riesco a comprenderla. Sapreste tradurmela in una normale funzione?


#define mm_clear_typecode(typecode) ((*typecode)[0]=(*typecode)[1]= \
(*typecode)[2]=' ',(*typecode)[3]='G')


In particolare non riesco a capire quello che viene dopo il " \ ".

typecode per la cronaca è un semplice typedef per un array di 4 char.
typedef char MM_typecode[4];

Grazie mille in anticipo.

edit: La traduzione in funzione semplice non deve essere per forza in C#/Java. Va benissimo anche in C++


char mm_clear_typecode(MM_typecode *val)
{
(*val)[0] = (*val)[1] = (*val)[2] = ' ';
(*val)[3] = 'G';
return (*val)[3];
}


Ovviamente si puo' scrivere meglio; era solo per illustrare la macro...

[Kendall]
20-08-2012, 21:02
char mm_clear_typecode(MM_typecode *val)
{
(*val)[0] = (*val)[1] = (*val)[2] = ' ';
(*val)[3] = 'G';
return (*val)[3];
}


Ovviamente si puo' scrivere meglio; era solo per illustrare la macro...

Ti ringrazio. Quindi il backslash non fa altro che dire al compilatore che l'espressione della macro va a capo?

__ZERO_UNO__
21-08-2012, 00:53
Che il contenuto della macro continua sulla riga successiva, come se fosse scritta su una riga soltanto. Spezza una sequenza di istruzioni in più righe.