h
La librería conio.h no se considera parte de la biblioteca estándar de C, no obstante fue bastante
utilizada en su momento debido a las múltiples funciones para dar mejor presentación a los
programas. Ésta librería es originaria de los años 80 y su creadora fue la compañía Borland, la cual
es responsable del lanzamiento de múltiples compiladores de C.
Hay defensores y detractores de la librería conio.h, algunos la consideran de enorme utilidad para
dar mejor aspecto estético al programa, y otros que simplemente no ven necesario incorporar ésta
librería debido a la poca necesidad de enriquecer visualmente programas de consola, dado el
panorama y los entornos actuales.
Por otro lado está el detalle de que sólo es posible utilizarlos en entornos de MS-DOS, es
decir, Windows, y dada la cantidad de entornos y sistemas operativos actuales, muchos no ven
necesario seguir utilizando ésta librería. En caso de querer utilizarla en Linux es necesario seguir
unas instrucciones, las cuales quedan fuera del alcance de éste artículo.
La especificación de la librería es la siguiente:
La librería stdlib.h
La librería stdlib.h contiene muchas utilidades para los programadores, tales como la gestión de
memoria dinámica, la ordenación y búsqueda en arrays o el control de procesos.
Conversiones numéricas.
La librería ctype.h
Jugar con los caracteres dentro de un programa es una práctica de lo más habitual, a veces podemos
necesitar mostrar mayúsculas, minúsculas o pasar de una a otra o realizar operaciones simples con
caracteres.
Para eso existe la librería que hoy vamos a ver, ctype.h. Ésta librería se encarga de todo lo relacionado
a modificar y operar con caracteres, sin duda alguna muy útil a la hora de representar en pantalla y comprobar
información.
Su especificación es la misma que en la cabecera ctype.h salvo que adaptado para poder operar
con caracteres anchos, a continuación os dejo una tabla de correspondencias entre unas
funciones y otras:
La librería wchar.h
El archivo de cabecera de la biblioteca estándar de C wchar.h sirve para manipular flujos de datos y
caracteres anchos. La necesidad de ésta cabecera surgió cuando había que soportar la manipulación de
caracteres de diferentes idiomas.
F
Las constantes son:
NULL
WCHAR_MIN
WCHAR_MAX
WEOF
mbstate_t
size_t
wchar_t
wint_t
Funciones:
La librería tgmath.h
El archivo de cabecera de la biblioteca estándar de C tgmath.h sirve para utilizar funciones
matemáticas genéricas, principalmente de apoyo a math.h y complex.h, redefiniendo las funciones
para poder usar distintas definiciones en un mismo programa (sobrecarga).
Para cada función de math.h que existe en complex.h pero prefijada por c, el macro de tipo
genérico de tgmath.h conserva el nombre del de math.h.
Para las funciones que no tienen prefijo en math.h ni en complex.h, en tgmath.h se conserva el nombre
original.
atan2()
cbrt()
ceil()
copysign()
erf()
erfc()
exp2()
expm1()
fdim()
floor()
fma()
fmax()
fmin()
fmod()
frexp()
hypot()
ilogb()
ldexp()
lgamma()
llrint()
llround()
log10()
log1p()
log2()
logb()
lrint()
lround()
nearbyint()
nextafter()
nexttoward()
remainder()
remquo()
rint()
round()
scalbn()
scalbln()
tgamma()
trunc()
Para cada función de complex.h que tienen prefijo y no existen en math.h, la cabecera tgmath.h
conserva el nombre de complex.h.
carg()
cimag()
conj()
cproj()
creal()
La librería stdio.h
El archivo de cabecera de la biblioteca estándar de C stdio.h se utiliza para
utilizar las capacidades de entrada y salida más comunes en el lenguaje C como
scanf o printf.
Nombre Descripción
Coloca el indicador de posición de fichero para el stream apuntado por stream al comienzo
rewind
del fichero.
tmpfile Crea y abre un fichero temporal que es borrado cuando cerramos con la función fclose().
Despeja los indicadores de final de fichero y de posición de fichero para el stream apuntado
clearerr
por stream al comienzo del fichero.
Envía, desde el array apuntado por puntero, hasta nmemb de elementos cuyo tamaño es
especificado por tamaño. El indicador de posición de ficheros es avanzado por el número
fwrite
de caracteres escritos correctamente. Si existe un error, el valor resultante del indicador de
posición de ficheros es indeterminado.
Lee caracteres de entrada hasta que encuentra un salto de línea, y los almacena en un
gets
único argumento.
printf,fprintf,sprintf
Usados para imprimir salidas de datos.
snprintf
Esta función es equivalente a la función setvbuf pasando los valores _IOFBF para modo y
setbuf BUFSIZ para tamaño, o (si acumulador es un puntero nulo), con el valor _IONBF para
modo.
Sólo puede ser usada después de que el stream apuntado por stream ha sido asociado con
un fichero abierto y antes de otra operación cualquiera es llevada acabo al stream. El
argumento modo determina cómo stream será almacenado según lo siguiente: _IOFBF
ocasiona la entrada/salida a ser completamente almacenado; _IOLBF ocasiona la
setvbuf
entrada/salida a almacenar por líneas; _IONBF ocasiona la entrada/salida a no ser
almacenado. Si acumulador no es un puntero nulo, el array al que es apuntado puede ser
usado en vez de la acumulación adjudicada por la función setvbuf. El argumento tamaño
especifica el tamaño del array.
Genera una cadena de caracteres que es un nombre válido para ficheros y que no es igual
al nombre de un fichero existente. La función tmpnam genera una cadena diferente cada
tmpnam vez que es llamada, hasta un máximo de TMP_MAX veces. Si la función es llamada más
veces que TMP_MAX, entonces el comportamiento de la función está definido según la
implementación del compilador.
ungetc
Nombre Descripción
BUFSIZ Entero que indica el tamaño del buffer utilizado por la función setbuf().
Tamaño máximo de la cadena de caracteres que contienen el nombre de un fichero para ser
FILENAME_MAX
abierto
Abreviatura de input/output line buffered (...??); es un entero que se puede pasar como parametro
_IOLBF
a la función setvbuf() para requerir line buffered (??)en la entrada y salida del stream abierto.
Abreviatura de "input/output not buffered" (entrada/salida sin buffer); es un entero que se puede
_IONBF pasar como parametro a la función setvbuf() para requerir que la entrada salida del stream abierto
funcione sin buffer.
Tamaño de la cadena de caractres con la longitud suficiente para almacenar un nombre de fichero
L_tmpnam
temporal generado por la función tmpnam().
Macro que representa la constante puntero nulo; representa un valor de puntero que no apunta a
NULL
ninguna dirección válida de objeto alguno en memoria.
Entero que se puede pasar como parámetro a la función fseek() para indicar posicionamiento
SEEK_CUR
relativo a la posición actual del fichero.
Entero que se puede pasar como parámetro a la función fseek() para indicar posicionamiento
SEEK_END
relativo al final del fichero.
Entero que se puede pasar como parámetro a la función fseek() para indicar posicionamiento
SEEK_SET
relativo al inicio del fichero.
TMP_MAX El número máximo de nombres de ficheros únicos generables por la función tmpnam().
Nombre Descripción
stderr Puntero a FILE que referencia la salida de error estándar, normalmente el monitor.
Con signo:
intN_t
int_leastN_t
int_fastN_t
intptr_t
intmax_t
Sin signo:
uintN_t
uint_leastN_t
uint_fastN_t
uintptr_t
uintmax_t
Ejemplo de declaración:
int_fast32_t numero;
Para utilizar estos tipos junto con printf y scanf se hace la referencia a la variable de la siguiente forma:
Para scanf:
Ejemplo:
Para printf:
Ejemplo:
Macros:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main(void) {
bool keep_going = true; // Antes sería `bool keep_going = 1;`
while(keep_going) {
printf("Éste mensaje se mostrará mientras la variable sea True.\n");
keep_going = false; // Antes sería `keep_going = 0;`
}
printf("¡Para!\n");
return EXIT_SUCCESS;
}
La librería stdarg.h
El archivo de cabecera de la biblioteca estándar de C stdarg.h se utiliza para poder acceder a una
cantidad variable de argumentos pasados a una función.
Esto se utiliza mucho en programación con el concepto de “Variadic function”, es decir, una función que
acepta un número variable de argumentos.
Para utilizar este concepto miramos éste ejemplo de declaración y uso de una función:
Hemos definido la función, que acepta un char, un double, un int y un número indeterminado de
parámetros de tipo entero. A la hora de usarlo, se puede ver igualmente como se declaran los parámetros
de la misma forma.
El tipo en stdarg.h es:
Name Description
Name Description
va_start Comienza a recorrer la lista de argumentos.
#include <stdio.h>
#include <stdarg.h>
/* Muestra por pantalla todos los números positivos, se asume que son enteros */
void printargs(int arg1, ...)
{
va_list ap;
int i;
va_start(ap, arg1);
for (i = arg1; i >= 0; i = va_arg(ap, int))
printf("%d ", i);
va_end(ap);
putchar('\n');
}
int main(void)
{
printargs(5, 2, 14, 84, 97, 15, 24, 48, -1);
printargs(84, 51, -1);
printargs(-1);
printargs(1, -1);
return 0;
}
La librería signal.h
Tipos:
Macros:
Constantes:
La librería setjmp.h
int setjmp(jmp_buf env) - Para establecer el punto en que se debe saltar más tarde
desde longjump. El valor de setjmp es 0, y si se regresa a él desde un longjmp su
valor es distinto de cero.
void longjmp(jmp_buf env, int value) – se utiliza para volver al momento del
programa en que esté ubicado setjmp.
Como se puede ver, las dos funciones utilizar una variable de un tipo:
La idea general sería como una bandera que colocamos en un punto concreto
del programa para volver a él más tarde automáticamente y así no tener que
programar rutinas o casos concretos.
La librería limits.h
Su definición es muy parecida a la de la librería float.h, limita los valores de varios tipos de variables, las
constantes son las siguientes:
CHAR_BIT
SCHAR_MIN
SHRT_MIN
INT_MIN
LONG_MIN
LLONG_MIN
SCHAR_MAX
SHRT_MAX
INT_MAX
LONG_MAX
LLONG_MAX
UCHAR_MAX
USHRT_MAX
UINT_MAX
ULONG_MAX
ULLONG_MAX
CHAR_MIN
CHAR_MAX
MB_LEN_MAX
#include <stdio.h>
#include <limits.h>
int main()
{
return(0);
}
La librería iso646.h
El archivo de cabecera de la biblioteca estándar de C iso646.h se utiliza para poder utilizar los conjuntos
de caracteres ISO 646.
Macro Definición
and &&
and_eq &=
bitand &
bitor |
compl ~
not !
not_eq !=
or ||
or_eq |=
xor ^
xor_eq ^=
La librería inttypes.h
El archivo de cabecera de la biblioteca estándar de C inttypes.h se utiliza para operaciones de conversión
entre números entero de una forma más precisa, además de permitirnos definir con exactitud la longitud de un
entero.
Con signo:
intN_t
int_leastN_t
int_fastN_t
intptr_t
intmax_t
Sin signo:
uintN_t
uint_leastN_t
uint_fastN_t
uintptr_t
uintmax_t
Donde N es el número de bits: 8,16,32,64.
Ejemplo de declaración:
int_fast32_t numero;
Para utilizar estos tipos junto con printf y scanf se hace la referencia a la variable de la siguiente forma:
Para scanf:
SCN + d(el número) + FAST o LEAST + N (bits)
Ejemplo:
scanf(“%d” SCNdFAST32 “\n”,&numero);
Para printf:
PRI + d(el número) + FAST o LEAST + N (bits)
Ejemplo:
La librería float.h
El archivo de cabecera de la biblioteca estándar de C float.h que contiene parámetros dependientes del
entorno e información sobre los rangos posibles y otras limitaciones para los números reales.
DBL_DIG
DBL_EPSILON
DBL_MANT_DIG
DBL_MAX
DBL_MAX_10_EXP
DBL_MAX_EXP
DBL_MIN
DBL_MIN_10_EXP
DBL_MIN_EXP
FLT_DIG
FLT_EPSILON
FLT_MANT_DIG
FLT_MAX
FLT_MAX_10_EXP
FLT_MAX_EXP
FLT_MIN
FLT_MIN_10_EXP
FLT_MIN_EXP
FLT_RADIX
FLT_ROUNDS
LDBL_DIG
LDBL_EPSILON
LDBL_MANT_DIG
LDBL_MAX
LDBL_MAX_10_EXP
LDBL_MAX_EXP
LDBL_MIN
LDBL_MIN_10_EXP
LDBL_MIN_EXP
La librería fenv.h
El archivo de cabecera de la biblioteca estándar de C fenv.h permite controlar mediante macros entornos
en coma flotante.
Gracias a ésta librería podemos controlar y operar mucho mejor con números con coma flotante,
además podremos controlar mejor las operaciones de redondeo o controlar ajustes que afectan a los cálculos
generales con coma flotante.
Función Descripción
feholdexcept Guarda el entorno de coma flotante actual y borra todas las excepciones.
feupdateenv Restaura el entorno de coma flotante actual pero conserva todas las excepciones.
La librería errno.h
El archivo de cabecera de la biblioteca estándar de C errno.h, el cual mediante macros presenta un informe
de errores mediante la definición de códigos de error.
Los códigos de error vienen definidos como constantes y son dependientes del compilador que se use.
Según wikipedia en MinGW son los siguientes:
/* 26 - Unknown Error */
#define EFBIG 27 /* File too large */
#define ENOSPC 28 /* No space left on device */
#define ESPIPE 29 /* Invalid seek (seek on a pipe?) */
#define EROFS 30 /* Read-only file system */
#define EMLINK 31 /* Too many links */
#define EPIPE 32 /* Broken pipe */
#define EDOM 33 /* Domain error (math functions) */
#define ERANGE 34 /* Result too large (possibly too small) */
/* 35 - Unknown Error */
#define EDEADLOCK 36 /* Resource deadlock avoided (non-Cyg) */
#define EDEADLK 36
/* 37 - Unknown Error */
#define ENAMETOOLONG 38 /* Filename too long (91 in Cyg?) */
#define ENOLCK 39 /* No locks available (46 in Cyg?) */
#define ENOSYS 40 /* Function not implemented (88 in Cyg?) */
#define ENOTEMPTY 41 /* Directory not empty (90 in Cyg?) */
#define EILSEQ 42 /* Illegal byte sequence */
En la web de The Single UNIX® Specification podemos ver la última actualización en la página de The Open
Group.
En la web barricane se hace una recopilación de los errores códigos de error en Linux/C desde los archivos
contenidos en /usr/include/asm-generic/errno-base.h y /usr/include/asm-generic/errno.h.
La librería assert.h
El archivo de cabecera de la biblioteca estándar de C assert.h contiene la macro de depuración assert, el
cual implementa una aserción para así comprobar comportamientos del programa.
#include <stdio.h>
#include <assert.h>
return 0;
}
Vemos la definición de la cabecera, la función y la llamada a la misma, de tal forma que lo que el
programa va a hacer es comprobar la expresión x<=7, en caso de que la condición se evalúe como falsa
entonces la ejecución del programa terminará mediante la función abort ().
El archivo de cabecera assert.h será muy útil a la hora de depuración de programas y previsión de
comportamientos inesperados.
(Mientras terminan las votaciones y comenzamos con los nuevos temas, voy a ir completando diversos
apartados del blog, como por ejemplo la biblioteca estándar de C. Conforme vaya viendo lo que necesitemos
iré completando todo este tipo de apartados a la vez que continuamos con los temas, lo cual implicaría más
de un post al día, a ver que tal se da.)
La librería complex.h
Muchas veces es necesario manipular de una longitud más allá de los números enteros, existen momentos en
los que necesitemos realizar complejos cálculos matemáticos y para ello debemos ser capaces de manejar
números complejos. Para eso en C existe la librería complex.h.
Gracias a la librería complex.h podremos manejar cualquier tipo de dato y realizar operaciones logarítmicas,
raíces o trigonométricas. La especificación de la librería es la siguiente:
Las funciones declaradas en string.h se han hecho muy populares, por lo que están garantizadas para
cualquier plataforma que soporte C. Sin embargo, existen algunos problemas de seguridad con estas
funciones, como el desbordamiento de buffer (buffer overflow), que hacen que algunos programadores
prefieran opciones más seguras frente a la portabilidad que estas funciones ofrecen. Además, las funciones
para cadenas de caracteres sólo trabajan con conjuntos de caracteres ASCII o extensiones ASCII
compatibles.