Ottengo l'errore
‘CHAR_WIDTH’ undeclared
quando provo a compilare questo semplice programma:
#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
e gcc: GNU C17 (Ubuntu 8.3.0-6ubuntu1) versione 8.3.0 (x86_64-linux-gnu) compilata da GNU C versione 8.3.0, GMP versione 6.1.2, MPFR versione 4.0.2, MPC versione 1.1.0 , versione isl isl-0.20-GMP, kernel: 5.0.0-37-generico.
Come indicato qui, CHAR_WIDTH dovrebbe essere definito in limits.h che è incluso nel mio programma. Quindi perché ottengo questo errore?
Con l' -v
opzione ho scoperto che la libreria verrà cercata in quelle directory:
#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 contengono un limite.h che include syslimits.h dalla stessa directory che a sua volta include i limiti successivi.h, che dalla mia comprensione dovrebbe trovarsi in la directory / usr / include.
La macro CHAR_WIDTH è infatti definita in quei file ma in alcune condizioni che superano le mie attuali conoscenze.
Le condizioni che ho trovato fino ad ora sono:
/* 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
e :
#ifdef __STDC_WANT_IEC_60559_BFP_EXT__
/* TS 18661-1 widths of integer types. */
# undef CHAR_WIDTH
# define CHAR_WIDTH __SCHAR_WIDTH__
Ecco perché ho bisogno del tuo aiuto.
Nota: ottengo lo stesso errore con tutte le altre macro descritte in A.5.1, in particolare: SCHAR_WIDTH, INT_WIDTH, LONG_WIDTH, ecc.
__STDC_WANT_IEC_60559_BFP_EXT__
o passalo dalla riga di comando
CHAR_BIT
di essere 8, il che dovrebbe significare che CHAR_WIDTH
deve essere anche 8 su sistemi POSIX.
#define
prima del #include
?