Linux의 Limits.h에 WORD_BIT가 없는 이유는 무엇입니까?

Linux의 Limits.h에 WORD_BIT가 없는 이유는 무엇입니까?

맨페이지에서 man limits.h:

       {WORD_BIT}
             Number of bits in an object of type int.
             Minimum Acceptable Value: 32

그러나 간단한 프로그램을 실행하면 다음과 같습니다.

#include <limits.h>
#include <stdio.h>

int main() {
  printf("%d\n", WORD_BIT);
  return 0;
}

그러나 gcc()로 gcc file.c -o file컴파일 하려고 하면 다음과 같은 결과가 나타납니다.

error: ‘WORD_BIT’ undeclared (first use in this function)

이 정보가 내 시스템에 정의되어 있지 않은 이유는 무엇이며, C 프로그램에서 이 정보를 다른 곳에서 찾을 수 있습니까?

내 시스템:

  • 페도라 36(실버 블루)
  • gcc 버전 12.2.1 20220819(Red Hat 12.2.1-1)(GCC)
  • ldd(GNU libc) 2.35

답변1

_GNU_SOURCE이것이 문서화되어 있는지는 확실하지 않지만 GNU C 라이브러리를 사용하여 다음을 얻으려면 설정해야 합니다 WORD_BIT.

$ gcc -include limits.h -E - <<<"WORD_BIT" | tail -n1
WORD_BIT

$ gcc -D_GNU_SOURCE -include limits.h -E - <<<"WORD_BIT" | tail -n1
32

넌 정말 그래야 해사용sysconf:

#include <unistd.h>
#include <stdio.h>

int main(int argc, char **argv) {
  printf("%ld\n", sysconf(_SC_WORD_BIT));
}

또는,GNU C 라이브러리 문서의 권장 사항을 따르십시오.:

#include <limits.h>
#include <unistd.h>
#include <stdio.h>

int main(int argc, char **argv) {
#ifdef WORD_BIT
  printf("%d\n", WORD_BIT);
#else
  printf("%ld\n", sysconf(_SC_WORD_BIT));
#endif
}

(이것이 나타나는 이유는 man limits.h이 매뉴얼 페이지입니다.POSIX 참조limits.h, 시스템의 C 라이브러리를 반드시 정확하게 문서화하지 않을 수도 있습니다. 매뉴얼 페이지의 섹션을 보면 이를 확인할 수 있습니다. 접미사 "P"는 POSIX 문서임을 나타냅니다. )

sizeof(int) * CHAR_BIT대신 ; 을 항상 정의 할 수 있습니다 CHAR_BIT. 추가적으로 POSIX는 C 표준을 확장하여 CHAR_BIT8로 지정되어 있으므로 POSIX를 가정한다면 sizeof(int) * 8.

답변2

gcc내장된 정의 세트 가 있습니다 . 당신이 찾고있는 것은__SIZEOF_INT__

전체 정의 목록은 문서에 있습니다.
https://gcc.gnu.org/onlinedocs/cpp/Common-Pre Defined-Macros.html

정의 대신 이를 사용하는 이점은 limits.h정의가 컴파일러에 내장되어 있다는 것입니다. 이는 이 특정 플랫폼에 대해서는 절대적으로 정확하지만 이 특정 브랜드의 컴파일러와 관련이 있습니다.

하지만 크기 때문에 int사용하기가 훨씬 쉽습니다 sizeof(int).

관련 정보