Disponible la nueva versión "donationware" 7.3 de OrganiZATOR
Descubre un nuevo concepto en el manejo de la información.
La mejor ayuda para sobrevivir en la moderna jungla de datos la tienes aquí.

Curso C++

[Home]  [Inicio]  [Índice]


1.4.1b  Macros, valores y tipos estándar

§1  Sinopsis

Tanto el lenguaje en sí mismo como la Librería Estándar, a la que nos referimos más detenidamente en el Capítulo 5 ( 5) y que en la práctica forma parte inseparable del lenguaje,  introducen una serie de macros, valores y tipos para uso propio.

§2  Macros

Son constantes simbólicas que son cambiadas a determinados valores mediante una macro-sustitución durante la compilación.  Sus definiciones están incluídas en ficheros de cabecera.  Por ejemplo, el fichero de cabecera <stdlib.h>, de Borland C++ nos indica que la constante EXIT_FAILURE es sustituida por el valor 1 en la fase de preprocesado;  a su vez el fichero <stdio.h> informa que la etiqueta stderr será sustituida por un miembro de una matriz: _streams, que tiene un sentido concreto para este compilador [1].

Las macros introducidas por el Estándar C++ son las siguientes:

assert           HUGE_VAL         NULL <cstring>   SIGILL     va_arg
BUFSIZ           LC_ALL           NULL <ctime>     SIGINT     va_end
CLOCKS_PER_SEC   LC_COLLATE       NULL <cwchar>    SIGSEGV    va_start
EDOM             LC_CTYPE         offsetof         SIGTERM    WCHAR_MAX
EOF              LC_MONETARY      RAND_MAX         SIG_DFL    WCHAR_MIN
ERANGE           LC_NUMERIC       SEEK_CUR         SIG_ERR    WEOF <cwchar>
errno            LC_TIME          SEEK_END         SIG_IGN    WEOF <cwctype>
EXIT_FAILURE     L_tmpnam         SEEK_SET         stderr     _IOFBF
EXIT_SUCCESS     MB_CUR_MAX       setjmp           stdin      _IOLBF
FILENAME_MAX     NULL <cstddef>   SIGABRT          stdout     _IONBF
FOPEN_MAX        NULL <cstdio>    SIGFPE           TMP_MAX

Nota:  Las expresiones entre ángulos, como <cstdio>, indican que la definición se encuentra en más de un fichero de cabecera.

§3  Valores estándar

Al igual que los anteriores, los valores estándar son constantes simbólicas cuyo valor es cambiado durante el preprocesado.  Se refieren a valores de contorno (máximos y mínimos) definidos en la implementación.  Algunos de ellos son detallados en el capítulo dedicado a la representación y rango de los tipos numéricos ( 2.2.4).  Por ejemplo, la constante ULONG_MAX se refiere al valor máximo que puede albergar un tipo unsigned long.  El fichero <_lim.h> de Borland C++ señala su valor con un define:

#define ULONG_MAX 4294967295UL     /* maximum unsigned long value */ 

Los valores est'andar definidos en el referido compilador son los siguientes:

CHAR_BIT         FLT_DIG          INT_MIN           MB_LEN_MAX
CHAR_MAX         FLT_EPSILON      LDBL_DIG          SCHAR_MAX
CHAR_MIN         FLT_MANT_DIG     LDBL_EPSILON      SCHAR_MIN
DBL_DIG          FLT_MAX          LDBL_MANT_DIG     SHRT_MAX
DBL_EPSILON      FLT_MAX_10_EXP   LDBL_MAX          SHRT_MIN
DBL_MANT_DIG     FLT_MAX_EXP      LDBL_MAX_10_EXP   UCHAR_MAX
DBL_MAX          FLT_MIN          LDBL_MAX_EXP      UINT_MAX
DBL_MAX_10_EXP   FLT_MIN_10_EXP   LDBL_MIN          ULONG_MAX
DBL_MAX_EXP      FLT_MIN_EXP      LDBL_MIN_10_EXP   USHRT_MAX
DBL_MIN          FLT_RADIX        LDBL_MIN_EXP
DBL_MIN_10_EXP   FLT_ROUNDS       LONG_MAX
DBL_MIN_EXP      INT_MAX          LONG_MIN
§4  Tipos estándar

Son estructuras y clases definidas en ficheros de cabecera y utilizadas por la Librería Estándar.

clock_t    ldiv_t             size_t <cstdio>   va_list
div_t      lconv              mbstate_t         wctrans_t wctype_t
FILE       ptrdiff_t          size_t <ctime>    size_t <cstring>
fpos_t     sig_atomic_t       time_t            wint_t <cwchar>
jmp_buf    size_t <cstddef>   tm                wint_t <cwctype> 

Nota:  Las expresiones entre ángulos, como <cstdio>, indican que la definición se encuentra en más de un fichero de cabecera.


Ejemplo:  el fichero <stdio.h> de Borland C++, nos informa que FILE es una estructura con la siguiente definición:

typedef struct {
  unsigned char *curp;     /* Current active pointer */
  unsigned char *buffer;   /* Data transfer buffer */
  int level;               /* fill/empty level of buffer */
  int bsize;               /* Buffer size */
  unsigned short istemp;   /* Temporary file indicator */
  unsigned short flags;    /* File status flags */
  wchar_t hold;            /* Ungetc char if no buffer */
  char fd;                 /* File descriptor */
  unsigned char token;     /* Used for validity checking */
} FILE;                    /* This is the FILE object */

§5  Otros valores

Muchos ficheros de cabecera definen constantes especialmente útiles, y conocer su existencia puede ser de gran ayuda en determinados momentos.   A continuación se relacionan algunas de las definidas en Borland C++ con indicación del fichero en que están definidas. 

Constante Fichero Valor
BITSPERBYTE values.h Número de bits en un Byte
EDOM

errno.h

math.h

Código de error matemático
EOF stdio.h Valor numérico indicación de que se ha alcanzado el fin de fichero
ERANGE

errno.h

math.h

Código de error por resultado fuera de rango
FOPEN_MAX stdio.h Máximo número de ficheros por proceso (ver SYS_OPEN)
HANLE_MAX io.h Máximo número de manejadores ("Handles")
L_tmpnam stdio.h Tamaño de una matriz de caracteres suficiente para contener el nombre de un fichero temporal (nombre creado automáticamente por el sistema)
M_E math.h Valor de e (Constante de Euler) con doce cifras significativas
M_LOG2E math.h Valor del logaritmo decimal de e. log(e)
M_LOG10E math.h Valor de log10(e)
M_LN2 math.h Valor del logaritmo Nerperiano (base e) de 2.  ln(2)
N_LN10 math.h Valor de ln(10)
M_PI math.h Valor de la constante pi (π)
M_PI_2 math.h Valor  π/2
M_PI_4 math.h Valor   π/4
M_1_PI math.h Valor  1/π
M_2_PI math.h Valor 2/π
M_1_SQRTPI math.h Unidad dividida por raíz cuadrada de π.  1/SQR(π)
M_2_SQRTPI math.h Valor 2/SQRT(π)
M_SQRT2 math.h Raíz cuadrada de 2.  SQRT(2)
M_SQRT_2 math.h Raíz cuadrada de 2 dividida por 2.  SQRT(2)/2
RAND_MAX stdlib.h Valor máximo devuelto por la función rand() (generador de números aleatorios)
SYS_OPEN stdio.h Máximo número de ficheros por sistema (ver FOPEN_MAX)
TMP_MAX stdio.h Máximo número de ficheros con nombre único (generados por el Sistema)
UGE_VAL math.h Valor de fuera de rango superior ("Overflow") para operaciones matemáticas.

  Inicio.


[1]  En concreto, el tercer miembro de la referida matriz. La sentencia exacta es

#define stderr (&std::_streams[2])