PDA

Visualizza la versione completa : [C] Gestione inclusione di file mancante


}gu|do[z]{®©
09-01-2006, 18:54
è possibile gestire con qualche direttiva del preprocessore il fatto che un file incluso possa non esistere????

tnx

:ciauz:

ibykos
10-01-2006, 12:58
Potresti provare con la #ifndef, purché tu definisca una costante diversa per ogni file che può mancare all'appello.
Ad esempio potresti creare un header in questo modo



#define __MY_HEADER___


e nel codice inserire una define condizionata di questo tipo:



#ifndef __MY_HEADER___
fprintf (stderr,"%s) ERRORE - header mancante\n",argv[0]);
#endif

}gu|do[z]{®©
12-01-2006, 11:47
essendo file di sistema, poso provare a veder se è definita una delle costanti che definisce, giusto? mi serve proprio per assicurarmi di avere una costante, assegnandogli altrimenti un defult

ibykos
12-01-2006, 12:00
Non usarne una a caso, potrebbe essere definita da qualche altra parte per un altro motivo.
Molto spesso all'inizio di un header è definita una costante apposta per fare in modo da non definire la stessa libreria tante volte in un unico programma con più sorgenti.
Secondo me dovresti usare quella costante, se c'è.

}gu|do[z]{®©
12-01-2006, 17:27
capiuto.. ma siccome a me serve in particolare una costante.... quindi mi controlo quella, il resto non serve :D

il problema è che trattandosi di file sorgente di linux, potrebbe non esserci su qualche macchina... e il compilatore in caso si incazza mi pare, no? :D Come faccio a fa sì che effettui l'inclusione solo se il file esiste... o meglio.. a catturare e gestire l'errore in caso in cui il file non esista?

:ciauz:

}gu|do[z]{®©
12-01-2006, 17:39
parlo di errore al momento della compilazione.. trattasi di esame universitario e devo consegnare il sorgente :fagiano:

Gil Mour
12-01-2006, 19:24
mmm
sono perplesso

voglio dire, prima di eseguire le #if si presume che il file sia già stato incluso

se non è stato rilevato il compilatore dovrebbe uscire con un errore e le direttive condizionali seguenti sarebbero ignorate

mi spiego con un esempio:



#include <unfiledisistema.h>

/*
se il file non viene trovato il preprocessore va in errore
e le linee seguenti non sono compilate
*/

#ifndef _UNFILEDISISTEMA_H
fprintf(stderr,"oO");
#endif

//altra roba


o no?

}gu|do[z]{®©
12-01-2006, 19:30
sì appunto... quello che dico io è se esiste una direttiva che permetta din includere il file solo dopo averne veriifcato l'esuistenza... e gestire il caso contrario :Fagiano:

oregon
12-01-2006, 20:31
Penso che non abbia senso fare una cosa del genere (e che non si possa fare).

}gu|do[z]{®©
12-01-2006, 20:38
Originariamente inviato da oregon
Penso che non abbia senso fare una cosa del genere (e che non si possa fare).

ci ho sperato... tutto qui :D

Loading