Por lo que vale, la página de manual es incorrecta. Los prototipos se muestra:
int open(const char * pathname, int flags);
int open(const char * pathname, int flags, mode_t mode);
son no equivalente al prototipo correcta:
int open(const char * pathname, int flags, ...);
Usando las incorrectas que presta (por ejemplo, si prototipos de la función de sí mismo en lugar de incluir la cabecera de la derecha) hará que su programa tenga un comportamiento indefinido. (Y esto no es solo teórico, probablemente no se ejecutará en x86_64 y otras plataformas con ABI pass-by-register.)
Lo que la página man estaba tratando de expresar (y haciendo un trabajo muy pobre) es que la parte variada de la lista de argumentos de open
puede ser vacía o un solo argumento de tipo mode_t
, donde la ausencia o presencia del argumento opcional depende del valor de flags
.
Si el compilador conoce POSIX o conoce los tipos de argumento de la función a través de una extensión de idioma, puede hacer la comprobación. Si gcc/glibc no están haciendo eso, no me sorprendería ver que lo agreguen pronto, al igual que el argumento 'printf'. –
Gracias, realmente ayudó. –