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?