/* Integer type family size and range test Version 1.0 / 2001.10.01 Autor: pstrainer@gmx.net */ #include #include #include #define lower(c) (((c>='A')&&(c<='Z')) ? (c-'A'+'a') : c) #define int2hex(n) ((n<10)?('0'+n):('A'+n-10)) void print_header (char *); void print_trailer (void); void type_i (void); void type_ui (void); void type_s (void); void type_us (void); void type_l (void); void type_ul (void); void type_u (void); int subi (int, int, int, char *); unsigned int subui (int, int, int, char *); short subs (int, int, int, char *); unsigned short subus (int, int, int, char *); long subl (int, int, int, char *); unsigned long subul (int, int, int, char *); unsigned subu (int, int, int, char *); void print_data_type_constants (void); void main (void) { char myname[]=" "; char option; int invalid=0;; print_header(myname); option='$'; while (option!='z') { printf("\nTypes of integer variables that can be analyzed:\n"); printf("1=int, 2=unsigned int, 3=short, 4=unsigned short\n"); printf("5=long, 6=unsigned long, 7=unsigned T=type constants, Z=exit\n"); printf(" Enter your option: "); option=_getche(); printf("\n"); option=lower(option); switch (option) { case '1': {type_i();invalid=0;break;} case 'i': {type_i();invalid=0;break;} case '2': {type_ui();invalid=0;break;} case '3': {type_s();invalid=0;break;} case 's': {type_s();invalid=0;break;} case '4': {type_us();invalid=0;break;} case '5': {type_l();invalid=0;break;} case 'l': {type_l();invalid=0;break;} case '6': {type_ul();invalid=0;break;} case '7': {type_u();invalid=0;break;} case 'u': {type_u();invalid=0;break;} case 't': {print_data_type_constants();invalid=0;break;} case 'z': break; default: { printf("\nPlease enter a valid option to continue.\n"); if (++invalid>3) option='z'; } } } print_trailer(); } void type_i (void) { // analyze type integer int in,ai[2],ilen; char si[50]; printf("\nAnalyzing type \n"); printf("Data type constants: INT_MIN=%d INT_MAX=%d\n",INT_MIN,INT_MAX); ilen=int(&ai[2])-int(&ai[1]); printf("\nLength of int = %d bytes\n",ilen); in=subi(ilen,7,15,si); // 7FF... printf("int %s = %+d\n",si,in); in++; printf("int %s+1 = %+d\n",si,in); in=subi(ilen,8,0,si); // 800... printf("int %s = %+d\n",si,in); in--; printf("int %s-1 = %+d\n",si,in); in=subi(ilen,15,15,si); // FFF... printf("int %s = %+d\n",si,in); } void type_ui (void) { // analyze type unsigned integer int ilen; unsigned int uin,aui[2]; char si[50]; printf("\nAnalyzing type \n"); printf("Data type constant: UINT_MAX=%d\n",UINT_MAX); ilen=int(&aui[2])-int(&aui[1]); printf("\nLength of unsigned int = %d bytes\n",ilen); uin=subui(ilen,7,15,si); // 7FF... printf("int %s = %+d\n",si,uin); uin++; printf("int %s+1 = %+d\n",si,uin); uin=subui(ilen,8,0,si); // 800... printf("int %s = %+d\n",si,uin); uin--; printf("int %s-1 = %+d\n",si,uin); uin=subui(ilen,15,15,si); // FFF... printf("int %s = %+d\n",si,uin); } void type_s (void) { // analyze type short int ilen; short sn,as[2]; char si[50]; printf("\nAnalyzing type \n"); printf("Data type constants: SHRT_MIN=%d SHRT_MAX=%d\n",SHRT_MIN,SHRT_MAX); ilen=int(&as[2])-int(&as[1]); printf("\nLength of short = %d bytes\n",ilen); sn=subs(ilen,7,15,si); // 7FF... printf("short %s = %+d\n",si,sn); sn++; printf("short %s+1 = %+d\n",si,sn); sn=subs(ilen,8,0,si); // 800... printf("short %s = %+d\n",si,sn); sn--; printf("short %s-1 = %+d\n",si,sn); sn=subs(ilen,15,15,si); // FFF... printf("short %s = %+d\n",si,sn); } void type_us (void) { // analyze type short int ilen; unsigned short usn,aus[2]; char si[50]; printf("\nAnalyzing type \n"); printf("Data type constant: USHRT_MAX=%d\n",USHRT_MAX); ilen=int(&aus[2])-int(&aus[1]); printf("\nLength of unsigned short = %d bytes\n",ilen); usn=subus(ilen,7,15,si); // 7FF... printf("short unsigned %s = %+d\n",si,usn); usn++; printf("short unsigned %s+1 = %+d\n",si,usn); usn=subus(ilen,8,0,si); // 800... printf("short unsigned %s = %+d\n",si,usn); usn--; printf("short unsigned %s-1 = %+d\n",si,usn); usn=subus(ilen,15,15,si); // FFF... printf("short unsigned %s = %+d\n",si,usn); usn=-1; printf("short unsigned 0-1 = %+d\n",usn); } void type_l (void) { // analyze type long int ilen; long ln,al[2]; char si[50]; printf("\nAnalyzing type \n"); printf("Data type constants: LONG_MIN=%d LONG_MAX=%d\n",LONG_MIN,LONG_MAX); ilen=int(&al[2])-int(&al[1]); printf("\nLength of long = %d bytes\n",ilen); ln=subl(ilen,7,15,si); // 7FF... printf("long %s = %+d\n",si,ln); ln++; printf("long %s+1 = %+d\n",si,ln); ln=subl(ilen,8,0,si); // 800... printf("long %s = %+d\n",si,ln); ln--; printf("long %s-1 = %+d\n",si,ln); ln=subl(ilen,15,15,si); // FFF... printf("long %s = %+d\n",si,ln); } void type_ul (void) { // analyze type unsigned long int ilen; unsigned long uln,aul[2]; char si[50]; printf("\nAnalyzing type \n"); printf("Data type constant: ULONG_MAX=%d\n",ULONG_MAX); ilen=int(&aul[2])-int(&aul[1]); printf("\nLength of unsigned long = %d bytes\n",ilen); uln=subul(ilen,7,15,si); // 7FF... printf("long %s = %+d\n",si,uln); uln++; printf("long %s+1 = %+d\n",si,uln); uln=subul(ilen,8,0,si); // 800... printf("long %s = %+d\n",si,uln); uln--; printf("long %s-1 = %+d\n",si,uln); uln=subul(ilen,15,15,si); // FFF... printf("long %s = %+d\n",si,uln); } void type_u (void) { // analyze type unsigned int ilen; unsigned un,au[2]; char si[50]; printf("\nAnalyzing type \n"); printf("Data type constant: not specified\n"); ilen=int(&au[2])-int(&au[1]); printf("\nLength of unsigned = %d bytes\n",ilen); un=subu(ilen,7,15,si); // 7FF... printf("unsigned %s = %+d\n",si,un); un++; printf("unsigned %s+1 = %+d\n",si,un); un=subu(ilen,8,0,si); // 800... printf("unsigned %s = %+d\n",si,un); un--; printf("unsigned %s-1 = %+d\n",si,un); un=subu(ilen,15,15,si); // FFF... printf("unsigned %s = %+d\n",si,un); un=-1; printf("unsigned 0-1 = %+d\n",un); } int subi (int len, int hi, int lo, char *s) { // return int number (hi.lo.lo.lo...) and hex string int i,result; result=hi; s[0]=int2hex(hi); len=2*len; for (i=1;i:\n"); printf("int: INT_MIN=%d INT_MAX=%d\n",INT_MIN,INT_MAX); printf("unsigned int: UINT_MAX=%d\n",UINT_MAX); printf("short SHRT_MIN=%d SHRT_MAX=%d\n",SHRT_MIN,SHRT_MAX); printf("unsigned short: USHRT_MAX=%d\n",USHRT_MAX); printf("long LONG_MIN=%d LONG_MAX=%d\n",LONG_MIN,LONG_MAX); printf("unsigned long: ULONG_MAX=%d\n",ULONG_MAX); } void print_header (char *header) { #ifdef _DEBUG printf("Debug version "); #else printf("Release version "); #endif printf("of program %s\n\n",header); } void print_trailer (void) { #ifdef _DEBUG printf("\nPress any key to continue "); _getch(); #endif } /* ========== eof ========== */