2012-08-17 7 views
5

Ho una funzione che deve essere in grado di scrivere su stdout o su un file, a seconda di ciò che l'utente desidera. Tuttavia, il valore predefinito è lo standard. Per fare questo, sto facendo il seguente (meno il controllo degli errori, ecc):È impostato un FILE * uguale a stdout portatile?

FILE* out; 
if (writeToFile) { /*Code to open file*/; } 

else 
    out = stdout; 

// ...rest of the function goes here 

if (out != stdout) 
    fclose(out); 

Questo certamente fa il trucco, ma non ho idea di come portatile è. E se non lo è, e/o c'è un altro problema con esso, come dovrei andare su questo?

risposta

8

Sì, è portatile e va bene, a patto di non rovinare l'implementazione a basso livello di *stdout (ad esempio chiamando close(fileno(stdout)) su Posix o utilizzando dup).

1

Dovrebbe andare bene. Potresti avere problemi se passi il puntatore avanti e indietro oltre il limite di una DLL (cioè, il codice C esterno alla DLL passa il puntatore allo stdout al codice C all'interno della DLL), ma a parte questo dovrebbe essere portatile.