codice:
inline int Fileno(FILE* fpStream)
{
int in;
if((in = fileno(fpStream)) < 0)
err_sys("(Module: %s) - ERROR fileno() failed", gargv[0]);
return in;
}
Devo trasformare in macro la funzione sovrastante.
E' un wrapper di fileno() per controllare il codice di errore comodamente.
Il mio problema è che "inline" è una richiesta, non un comando, e spesso vedo che i compilatori la ignorano per i motivi più disparati.
Per tagliare la testa al toro volevo ridefinire tutti i miei wrapper come macro.
Non riesco però a scrivere l'equivalente codice per il preprocessore.
Ho provato così:
codice:
#define Fileno(fp) \
{ \
int iRet; \
((iRet = fileno(fp)) < 0) ? rett : err_sys("(Module: %s) - ERROR fileno() failed", gargv[0]); \
}
La macro la utilizzerei poi tipo così:
int main()
{
FILE* fpProva;
int ifd = Fileno(fpProva);
// ......
return 0;
}
Non funziona e dà un errore compilando con g++ 3.2.
Mi sta venendo il dubbio che non si possa proprio fare.
Qualche idea?