Recibo el error
‘CHAR_WIDTH’ undeclared
cuando intento compilar este sencillo programa:
#include <stdio.h>
#include <limits.h>
int main()
{
printf("CHAR_BIT = %d\n", CHAR_BIT);
printf("CHAR_WIDTH = %d\n", CHAR_WIDTH);
return (0);
}
con
gcc ./show_char_width.c -o show_char_width
y gcc: GNU C17 (Ubuntu 8.3.0-6ubuntu1) versión 8.3.0 (x86_64-linux-gnu) compilado por GNU C versión 8.3.0, GMP versión 6.1.2, MPFR versión 4.0.2, MPC versión 1.1.0 , versión isl isl-0.20-GMP, kernel: 5.0.0-37-generic.
Como se indica aquí, CHAR_WIDTH debe definirse en los límites. H, que se incluye en mi programa. Entonces, ¿por qué me sale este error?
Con la -vopción encontré que la biblioteca se buscará en esos directorios:
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/x86_64-linux-gnu/8/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include
/ usr / lib / gcc / x86_64-linux-gnu / 8 / include-fixed contiene un limit.h que incluye syslimits.h desde el mismo directorio que a su vez incluye los siguientes límites.h, que según tengo entendido debería estar ubicado en el directorio / usr / include.
La macro CHAR_WIDTH está definida en esos archivos, pero en algunas condiciones que exceden mi conocimiento real.
Las condiciones que encontré hasta ahora son:
/* The integer width macros are not defined by GCC's <limits.h> before
GCC 7, or if _GNU_SOURCE rather than
__STDC_WANT_IEC_60559_BFP_EXT__ is used to enable this feature. */
#if __GLIBC_USE (IEC_60559_BFP_EXT)
# ifndef CHAR_WIDTH
# define CHAR_WIDTH 8
# endif
y:
#ifdef __STDC_WANT_IEC_60559_BFP_EXT__
/* TS 18661-1 widths of integer types. */
# undef CHAR_WIDTH
# define CHAR_WIDTH __SCHAR_WIDTH__
Por eso necesito tu ayuda.
Nota: obtengo el mismo error con todas las demás macros descritas en A.5.1, en particular: SCHAR_WIDTH, INT_WIDTH, LONG_WIDTH, etc.

__STDC_WANT_IEC_60559_BFP_EXT__o pasarlo por línea de comandoCHAR_BITser 8, lo que debería significarCHAR_WIDTHque también debe ser 8 en los sistemas POSIX.#defineantes de la#include?