ฉันพบข้อผิดพลาด
‘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 ควรกำหนดเป็นขีด จำกัด ซึ่งรวมอยู่ในโปรแกรมของฉัน เหตุใดฉันจึงได้รับข้อผิดพลาดนี้
ด้วย-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 จาก dir เดียวกันซึ่งจะรวมถึงขีด จำกัด ถัดไปซึ่งจากความเข้าใจของฉันควรอยู่ใน ไดเร็กทอรี / 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
หรือไม่