
/*
 * limits.c
 * Alberto Bertogli (albertogli@telpin.com.ar)
 * 22/Oct/2002
 *
 * Shows the limits of data types.
 *
 * Try compiling it with "gcc -std=c99 limits.c -o limits"
 */


#include <stdio.h>
#include <limits.h>
#include <stdint.h>
#include <float.h>
#include <fcntl.h>
#include <sys/param.h>	/* for PATH_MAX and NAME_MAX */

int main(void) {
	printf("max value of char: %d\n", CHAR_MAX);
	printf("min value of char: %d\n", CHAR_MIN);

	printf("max value of int: %d\n", INT_MAX);
	printf("min value of int: %d\n", INT_MIN);

	printf("max value of long: %ld\n", LONG_MAX);
	printf("min value of long: %ld\n", LONG_MIN);

#ifdef LLONG_MIN
	printf("min value of long long: %lld\n", LLONG_MIN);
	printf("max value of long long: %lld\n", LLONG_MAX);
	printf("max value of unsigned long long: %llu\n", ULLONG_MAX);
#else
	printf("long long limits unavailable (compile with -std=c99)\n");
#endif

	printf("max value of signed char: %d\n", SCHAR_MAX);
	printf("min value of signed char: %d\n", SCHAR_MIN);

	printf("max value of short: %d\n", SHRT_MAX);
	printf("min value of short: %d\n", SHRT_MIN);

	printf("max value of unsigned char: %u\n", UCHAR_MAX);
	printf("max value of unsigned int: %u\n", UINT_MAX);
	printf("max value of unsigned long %lu\n", ULONG_MAX);
	printf("max value of unsigned short: %u\n", USHRT_MAX);

	printf("max value of double: %e\n", DBL_MAX);
	printf("min value of double: %e\n", DBL_MIN);

	printf("max value of double 10 exp: %i\n", DBL_MAX_10_EXP);
	printf("min value of double 10 exp: %i\n", DBL_MIN_10_EXP);

	printf("max value of long double: %Lg\n", LDBL_MAX);
	printf("min value of long double: %Lg\n", LDBL_MIN);

	printf("max value of long double 10 exp: %i\n", LDBL_MAX_10_EXP);
	printf("min value of long double 10 exp: %i\n", LDBL_MIN_10_EXP);

	printf("max value of float: %g\n", FLT_MAX);
	printf("min value of float: %g\n", FLT_MIN);

	printf("max value of float 10 exp: %i\n", FLT_MAX_10_EXP);
	printf("min value of float 10 exp: %i\n", FLT_MIN_10_EXP);

	printf("-------------------------------------------------------\n");

	printf("sizeof char: %d\n", sizeof(char));
	printf("sizeof short: %d\n", sizeof(short));
	printf("sizeof int: %d\n", sizeof(int));
	printf("sizeof long: %d\n", sizeof(long));
	printf("sizeof long long: %d\n", sizeof(long long));
	printf("sizeof double: %d\n", sizeof(double));
	printf("sizeof long double: %d\n", sizeof(long double));
	printf("sizeof float: %d\n", sizeof(float));

	printf("-------------------------------------------------------\n");

	printf("sizeof off_t: %d\n", sizeof(off_t));
	printf("sizeof size_t: %d\n", sizeof(size_t));
	printf("sizeof ssize_t: %d\n", sizeof(ssize_t));
	printf("name max: %d\n", NAME_MAX);
	printf("path max: %d\n", PATH_MAX);

	return 0;

}

