맨페이지에서 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_BIT
8로 지정되어 있으므로 POSIX를 가정한다면 sizeof(int) * 8
.
답변2
gcc
내장된 정의 세트 가 있습니다 . 당신이 찾고있는 것은__SIZEOF_INT__
전체 정의 목록은 문서에 있습니다.
https://gcc.gnu.org/onlinedocs/cpp/Common-Pre Defined-Macros.html
정의 대신 이를 사용하는 이점은 limits.h
정의가 컴파일러에 내장되어 있다는 것입니다. 이는 이 특정 플랫폼에 대해서는 절대적으로 정확하지만 이 특정 브랜드의 컴파일러와 관련이 있습니다.
하지만 크기 때문에 int
사용하기가 훨씬 쉽습니다 sizeof(int)
.