El estándar POSIX para crypt()
dice que debería ser declarado en <unistd.h>
, así que eso es lo que hay que incluir.
Sin embargo, dependiendo de qué otras opciones de compilador que especifique, puede o no puede verlo.
Actualmente utilizo una cabecera que llamo "posixver.h"
que contiene el código:
#ifndef JLSS_ID_POSIXVER_H
#define JLSS_ID_POSIXVER_H
/*
** Include this file before including system headers. By default, with
** C99 support from the compiler, it requests POSIX 2001 support. With
** C89 support only, it requests POSIX 1997 support. Override the
** default behaviour by setting either _XOPEN_SOURCE or _POSIX_C_SOURCE.
*/
/* _XOPEN_SOURCE 700 is loosely equivalent to _POSIX_C_SOURCE 200809L */
/* _XOPEN_SOURCE 600 is loosely equivalent to _POSIX_C_SOURCE 200112L */
/* _XOPEN_SOURCE 500 is loosely equivalent to _POSIX_C_SOURCE 199506L */
#if !defined(_XOPEN_SOURCE) && !defined(_POSIX_C_SOURCE)
#if __STDC_VERSION__ >= 199901L
#define _XOPEN_SOURCE 600 /* SUS v3, POSIX 1003.1 2004 (POSIX 2001 + Corrigenda) */
#else
#define _XOPEN_SOURCE 500 /* SUS v2, POSIX 1003.1 1997 */
#endif /* __STDC_VERSION__ */
#endif /* !_XOPEN_SOURCE && !_POSIX_C_SOURCE */
#endif /* JLSS_ID_POSIXVER_H */
En los sistemas en los que trabajo, el establecimiento de _XOPEN_SOURCE
-700 sería un ejercicio de frustración e inutilidad, por mucho que me gustaría poder hacerlo Pero estas opciones normalmente hacen que mi código funcione correctamente en Linux, HP-UX, MacOS X, AIX y Solaris, las plataformas tipo Unix en las que normalmente trabajo.
Y esto funciona cuando me puse GCC en -std=c99
modo. Si usa -std=gnu99
, probablemente no necesite el encabezado; automáticamente habilita las extensiones estándar C99 plus.
Por cierto, yo solía tener esta estrofa en la parte superior de los archivos fuente individuales. A medida que crecía el número de archivos que contenían la estrofa (invadiendo cientos de archivos), me di cuenta de que cuando tenía que ajustar la configuración, tenía un trabajo de edición monstruoso por delante. Ahora tengo un encabezado y lo estoy adaptando a los archivos que tienen la estrofa, así que cambio un archivo (el encabezado) para efectuar un cambio para todo mi código, una vez que termine de deshacer el daño que hice.
Mi nombre no es 'gcc 4.6.0'. –
Publique la advertencia exacta que está recibiendo en tiempo de compilación. –
@Michael, he adjuntado mi pregunta con la advertencia que recibo. – ant2009