Ich erhalte die Fehlermeldung,
‘CHAR_WIDTH’ undeclared
wenn ich versuche, dieses einfache Programm zu kompilieren:
#include <stdio.h>
#include <limits.h>
int main()
{
printf("CHAR_BIT = %d\n", CHAR_BIT);
printf("CHAR_WIDTH = %d\n", CHAR_WIDTH);
return (0);
}
mit
gcc ./show_char_width.c -o show_char_width
und gcc: GNU C17 (Ubuntu 8.3.0-6ubuntu1) Version 8.3.0 (x86_64-linux-gnu), kompiliert von GNU C Version 8.3.0, GMP Version 6.1.2, MPFR Version 4.0.2, MPC Version 1.1.0 , isl version isl-0.20-GMP, kernel: 5.0.0-37-generic.
Wie hier angegeben, sollte CHAR_WIDTH in limits.h definiert werden, das in meinem Programm enthalten ist. Warum bekomme ich diesen Fehler?
Mit der -v
Option habe ich festgestellt, dass die Bibliothek in diesen Verzeichnissen durchsucht wird:
#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 enthält ein Limits.h, das syslimits.h aus demselben Verzeichnis enthält, das wiederum die nächsten Limits enthält.h, die sich nach meinem Verständnis in befinden sollten das Verzeichnis / usr / include.
Das CHAR_WIDTH-Makro ist zwar in diesen Dateien definiert, jedoch unter bestimmten Bedingungen, die mein tatsächliches Wissen überschreiten.
Die Bedingungen, die ich bis jetzt gefunden habe, sind:
/* 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
und :
#ifdef __STDC_WANT_IEC_60559_BFP_EXT__
/* TS 18661-1 widths of integer types. */
# undef CHAR_WIDTH
# define CHAR_WIDTH __SCHAR_WIDTH__
Deshalb brauche ich deine Hilfe.
Hinweis: Ich erhalte den gleichen Fehler mit allen anderen in A.5.1 beschriebenen Makros, insbesondere: SCHAR_WIDTH, INT_WIDTH, LONG_WIDTH usw.
__STDC_WANT_IEC_60559_BFP_EXT__
oder übergeben Sie es über die Befehlszeile
CHAR_BIT
8 sein, was bedeuten sollte, CHAR_WIDTH
dass es auf POSIX-Systemen auch 8 sein muss.
#define
vor dem #include
?