Я получаю сообщение об ошибке
‘CHAR_WIDTH’ undeclared
при попытке скомпилировать эту простую программу:
#include <stdio.h>
#include <limits.h>
int main()
{
printf("CHAR_BIT = %d\n", CHAR_BIT);
printf("CHAR_WIDTH = %d\n", CHAR_WIDTH);
return (0);
}
с
gcc ./show_char_width.c -o show_char_width
и gcc: GNU C17 (Ubuntu 8.3.0-6ubuntu1) версии 8.3.0 (x86_64-linux-gnu), скомпилированная GNU C версии 8.3.0, GMP версии 6.1.2, MPFR версии 4.0.2, MPC версии 1.1.0 , isl версия isl-0.20-GMP, ядро: 5.0.0-37-generic.
Как указано здесь, CHAR_WIDTH должен быть определен в limit.h, который включен в мою программу. Так почему я получаю эту ошибку?
С -v
опцией я обнаружил, что библиотека будет искать в этих каталогах:
#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 содержит limit.h, который включает syslimits.h из того же каталога, который, в свою очередь, включает следующие limit.h, который, по моему пониманию, должен находиться в каталог / usr / include.
Макрос CHAR_WIDTH действительно определен в этих файлах, но при некоторых условиях, которые превышают мои реальные знания.
Условия, которые я нашел до сих пор:
/* 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
а также :
#ifdef __STDC_WANT_IEC_60559_BFP_EXT__
/* TS 18661-1 widths of integer types. */
# undef CHAR_WIDTH
# define CHAR_WIDTH __SCHAR_WIDTH__
Вот почему мне нужна твоя помощь.
Примечание: я получаю ту же ошибку со всеми другими макросами, описанными в A.5.1, в частности: SCHAR_WIDTH, INT_WIDTH, LONG_WIDTH и т. Д.
__STDC_WANT_IEC_60559_BFP_EXT__
или передать его с помощью командной строки
CHAR_BIT
должен быть равен 8, что должно означать CHAR_WIDTH
также должно быть 8 в системах POSIX.
#define
до #include
?