답변:
원하는 데이터 유형의 정의를 알고 있으면 getconf
대부분의 Unix 시스템에서 이러한 값을 찾을 수 있습니다 .
$ getconf CHAR_BIT
8
변수 목록은 디스크에있을 man limits.h
뿐 아니라 맨 페이지 와 여기에 정의되어 man sysconf
있습니다. 당신이 locate limits.h
그것을 찾을 수 있습니다, 그것은 종종 여기에 있습니다 : /usr/include/linux/limits.h
.
getconf
것이 가장 안전한 방법 이라는 인상을 받고 있었습니다.
getconf
C 컴파일러를 옵션 으로 c89
또는 c99
거의 사용하지 않고 호출하지 않는 한 그렇게 안전하지 않습니다.
거의.
적어도 gcc를 사용하면 다음과 같이 작동합니다.
$ cpp -dD /dev/null | grep __SIZEOF_LONG__
어쨌든 C 프로그램을 작성하여 작성하고 싶지 않은 이유는 무엇입니까? 다음과 같이 쉘에서 작은 C 프로그램을 컴파일러로 보낼 수 있습니다.
binary=$(mktemp)
cat <<\EOF | cc -o $binary -x c -
#include <stdio.h>
int main() {
printf("int=%lu bytes\n", sizeof(int));
printf("long=%lu bytes\n", sizeof(long));
}
EOF
$binary
rm $binary
는 -x c
언어가 컴파일러에 지시 C
하고, -
표준 입력에서 읽어 수단을.
내 시스템에서 위의 인쇄 :
int=4 bytes
long=8 bytes
gcc 및 clang에서 테스트되었습니다.
예. 스캔 할 수 있습니다/usr/include/<arch>/limits.h
예를 들어, NetBSD amd64에서 다음 /usr/include/amd64/limits.h
을 보여줍니다.
#define CHAR_BIT 8 /* number of bits in a char */
#define SCHAR_MAX 0x7f /* max value for a signed char */
#define SCHAR_MIN (-0x7f-1) /* min value for a signed char */
#define UCHAR_MAX 0xff /* max value for an unsigned char */
#define CHAR_MAX 0x7f /* max value for a char */
#define CHAR_MIN (-0x7f-1) /* min value for a char */
#define USHRT_MAX 0xffff /* max value for an unsigned short */
#define SHRT_MAX 0x7fff /* max value for a short */
#define SHRT_MIN (-0x7fff-1) /* min value for a short */
#define UINT_MAX 0xffffffffU /* max value for an unsigned int */
#define INT_MAX 0x7fffffff /* max value for an int */
#define INT_MIN (-0x7fffffff-1) /* min value for an int */
#define ULONG_MAX 0xffffffffffffffffUL /* max value for an unsigned long */
#define LONG_MAX 0x7fffffffffffffffL /* max value for a long */
#define LONG_MIN (-0x7fffffffffffffffL-1) /* min value for a long */
데이터 유형을 참조하는 문자열이 포함 된 행을 구문 분석하고 출력하려면 다음을 시도하십시오.
{ shopt -s globstar; for i in /usr/include/**/*.h; do grep -HE '\b(([UL])|(UL)|())LONG|\bFLOAT|\bDOUBLE|\bINT' $i; done; }
이것은 물론 정의를 포착 /usr/include/limits.h
하므로 때로는 값으로 더 많이 얻을 수 있지만 주로 and 명령으로 limits.h
편리하게 볼 수있는 설정을 참조 합니다.getconf -a
ulimit -a