‘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包含一个limits.h,其中包含来自同一目录的syslimits.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
吗?