‘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 C 버전 8.3.0, GMP 버전 6.1.2, MPFR 버전 4.0.2, MPC 버전 1.1.0으로 컴파일 된 GNU C17 (Ubuntu 8.3.0-6ubuntu1) 버전 8.3.0 (x86_64-linux-gnu) , isl 버전 isl-0.20-GMP, 커널 : 5.0.0-37-generic.
여기에 명시된 바와 같이 CHAR_WIDTH는 내 프로그램에 포함 된 limits.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에는 같은 디렉토리의 syslimits.h를 포함하는 limits.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_BIT8이어야하며 이는 CHAR_WIDTHPOSIX 시스템에서도 8이어야합니다.
#define전에 #include했습니까?