‘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はプログラムに含まれている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が含まれています。これには、次のLimits.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
あります。つまり、POSIXシステムでも8でなければなりません。
#define
前に#include
?