‘CHAR_WIDTH’ undeclared
Bu basit programı derlemeye çalıştığımda hatayı alıyorum
:
#include <stdio.h>
#include <limits.h>
int main()
{
printf("CHAR_BIT = %d\n", CHAR_BIT);
printf("CHAR_WIDTH = %d\n", CHAR_WIDTH);
return (0);
}
ile
gcc ./show_char_width.c -o show_char_width
ve gcc: GNU C sürüm 8.3.0, GMP sürüm 6.1.2, MPFR sürüm 4.0.2, MPCR sürüm 4.0.0 tarafından derlenen GNU C17 (Ubuntu 8.3.0-6ubuntu1) sürüm 8.3.0 (x86_64-linux-gnu) , isl sürümü isl-0.20-GMP, çekirdek: 5.0.0-37-jenerik.
Belirtildiği gibi burada CHAR_WIDTH benim programına dahil edilir limits.h içinde tanımlanmalıdır. Peki neden bu hatayı alıyorum?
-vSeçeneği ile kütüphane bu dizinlerde aranacak bulundu:
#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'yi içeren bir limit.h içerir ve bu da bir sonraki sınırları içerir. h, benim anladığım kadarıyla içinde bulunması gereken / usr / include dizini.
CHAR_WIDTH makrosu gerçekten bu dosyalarda tanımlanır, ancak bazı bilgiler altında gerçek bilgimi aşar.
Şimdiye kadar bulduğum koşullar:
/* 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
ve :
#ifdef __STDC_WANT_IEC_60559_BFP_EXT__
/* TS 18661-1 widths of integer types. */
# undef CHAR_WIDTH
# define CHAR_WIDTH __SCHAR_WIDTH__
Bu yüzden yardımına ihtiyacım var.
Not: Özellikle A.5.1'de açıklanan diğer tüm makrolarda aynı hatayı alıyorum: SCHAR_WIDTH, INT_WIDTH, LONG_WIDTH, vb.
__STDC_WANT_IEC_60559_BFP_EXT__komut satırı ile tanımlama veya
CHAR_BIT8 olması gerekir, yani CHAR_WIDTHPOSIX sistemlerinde de 8 olmalıdır.
#defineönce yaptın mı #include?