Per quello che vale, la pagina man non è corretta. I prototipi si vede:
int open(const char * pathname, int flags);
int open(const char * pathname, int flags, mode_t mode);
sono non equivalente alla corretta prototipo:
int open(const char * pathname, int flags, ...);
Utilizzando quelli non corretti che fornisce (ad esempio se si prototipi la funzione da soli, piuttosto che con l'indicazione dell'header a destra) farà sì che il tuo programma abbia un comportamento indefinito. (E questo non è solo teorico, probabilmente non riuscirà a funzionare su x86_64 e altre piattaforme con ABI pass-by-register.)
Ciò che la pagina man stava cercando di esprimere (e facendo un lavoro molto scarso di) è che la parte variadell'elenco degli argomenti di open
può essere vuota o un singolo argomento di tipo mode_t
, in cui l'assenza o la presenza dell'argomento facoltativo dipende dal valore di flags
.
fonte
2010-10-17 15:43:30
Se il compilatore è a conoscenza di POSIX o è a conoscenza dei tipi di argomenti della funzione tramite un'estensione di lingua, può eseguire il controllo. Se gcc/glibc non lo sta già facendo, non sarei sorpreso di vederli aggiungerli presto, proprio come i controlli di argomento 'printf'. –
Grazie, mi ha davvero aiutato. –