Devo trasformare in macro la funzione sovrastante.codice:inline int Fileno(FILE* fpStream) { int in; if((in = fileno(fpStream)) < 0) err_sys("(Module: %s) - ERROR fileno() failed", gargv[0]); return in; }
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ì:
Non funziona e dà un errore compilando con g++ 3.2.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; }
Mi sta venendo il dubbio che non si possa proprio fare.
Qualche idea?
![]()

Rispondi quotando