Windows上的limits_h宏(C)

Hel*_*rld 3 c variables macros limits

我在Windows 8.1(x64)上运行了以下C代码,以便更好地理解原始数据类型的下限和上限,但我发现输出令人惊讶.

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

int main(void)
{
    printf("\n");
    printf("Integer types");
    printf("\n");
    printf("\n");
    printf("Signed");
    printf("\n");
    printf("\n");
    printf("signed char:          %d to %d\n", SCHAR_MIN, SCHAR_MAX);
    printf("signed short int:     %d to %d\n", SHRT_MIN, SHRT_MAX);
    printf("signed int:           %d to %d\n", INT_MIN, INT_MAX);
    printf("signed long int:      %d to %d\n", LONG_MIN, LONG_MAX);
    printf("signed long long int: %d to %d\n", LLONG_MIN, LLONG_MAX);
    printf("\n");
    printf("Unsigned");
    printf("\n");
    printf("\n");
    printf("unsigned char:          0 to %d\n", UCHAR_MAX);
    printf("unsigned short int:     0 to %d\n", USHRT_MAX);
    printf("unsigned int:           0 to %d\n", UINT_MAX);
    printf("unsigned long int:      0 to %d\n", ULONG_MAX);
    printf("unsigned long long int: 0 to %d\n", ULLONG_MAX);
    printf("\n");
    printf("Platform dependant");
    printf("\n");
    printf("\n");
    printf("char: %d to %d\n", CHAR_MIN, CHAR_MAX);
    printf("\n");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

以下是输出:

整数类型

signed char:-128 to 127
signed short int:-32768 to 32767
signed int:-2147483648 to 2147483647
signed long int:-2147483648 to 2147483647
signed long long int:0 to -1

无符号

unsigned char:0到255
unsigned short int:0到65535
unsigned int:0到-1
unsigned long int:0到-1
unsigned long long int:0到-1

平台依赖

char:-128到127

我没想到的是,LLONG_MIN为0,LLONG_MAX为-1,UINT_MAX,ULONG_MAX和ULLONG_MAX为-1.这里发生了什么?

Yu *_*Hao 5

你正在使用错误的格式,%d期待int,尝试

printf("signed long int:      %ld to %ld\n", LONG_MIN, LONG_MAX);
printf("signed long long int: %lld to %lld\n", LLONG_MIN, LLONG_MAX);
Run Code Online (Sandbox Code Playgroud)

printf("unsigned int:           0 to %u\n", UINT_MAX);
printf("unsigned long int:      0 to %lu\n", ULONG_MAX);
printf("unsigned long long int: 0 to %llu\n", ULLONG_MAX);
Run Code Online (Sandbox Code Playgroud)