⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 enquire.c

📁 GUN开源阻止下的编译器GCC
💻 C
📖 第 1 页 / 共 5 页
字号:
}Procedure bitpattern(p, size) char *p; unsigned int size; {	/* Printf the bit-pattern of p */	char c;	int i, j;	for (i=1; i<=size; i++) {		c= *p;		p++;		for (j=bits_per_byte-1; j>=0; j--)			printf("%c", (c>>j)&1 ? '1' : '0');		if (i!=size) printf(" ");	}}#define Order(x, px, mode)\   printf("%s%s ", co, mode); for (i=0; i<sizeof(x); i++) px[i]= ab[i]; \   for (i=1; i<=sizeof(x); i++) { c=((x>>(bits_per_byte*(sizeof(x)-i)))&mask);\      putchar(c==0 ? '?' : (char)c); }\   printf("%s\n", oc);Procedure endian(bits_per_byte) int bits_per_byte; {	/* Printf the byte-order used on this machine */	/*unsigned*/ short s=0;	/*unsigned*/ int j=0;	/*unsigned*/ long l=0;	char *ps= (char *) &s,	     *pj= (char *) &j,	     *pl= (char *) &l,	     *ab= "ABCDEFGHIJKLMNOPQRSTUVWXYZ";	unsigned int mask, i, c;	mask=0;	for (i=1; i<=(unsigned)bits_per_byte; i++) mask= (mask<<1)|1;	if (V) {		printf("%sCHARACTER ORDER%s\n", co, oc);		Order(s, ps, "short:");		Order(j, pj, "int:  ");		Order(l, pl, "long: ");	}}Procedure missing(s) char *s; {	printf("%s*** #define %s missing from limits.h%s\n", co, s, oc);	bugs++;}Procedure fmissing(s) char *s; {	printf("%s*** #define %s missing from float.h%s\n", co, s, oc);	bugs++;}/* To try and fool optimisers */int false() { return 0; }#define Promoted(x) (false()?(x):(-1))#define is_signed(x) (Promoted(x) < 0)#define sign_of(x) ((x)?"signed":"unsigned")#define Signed 1#define Unsigned 0#define sgn(x) ((is_signed(x))?Signed:Unsigned)#define showtype(t, x) Vprintf("%s%s %s %s%s\n", co, t, sign_of(is_signed(x)), type_of(sizeof(x)), oc)char *type_of(x) int x; {	if (x == sizeof(char)) {		if (sizeof(char) == sizeof(int)) return "char/short/int";		if (sizeof(char) == sizeof(short)) return "char/short";		return "char";	}	if (x == sizeof(short)) {		if (sizeof(short) == sizeof(int)) return "short/int";		return "short";	}	if (x == sizeof(int)) {		if (sizeof(int) == sizeof(long)) return "int/long";		return "int";	}	if (x == sizeof(long)) return "long";	return "unknown-type";}char *ftype_of(x) int x; {	if (x == sizeof(float)) {		return "float";	}	if (x == sizeof(double)) {		if (sizeof(double) == sizeof(Long_double))		  return "(long)double";		return "double";	}	if (x == sizeof(Long_double)) {		return "long double";	}	return "unknown-type";}Procedure typerr(name, esign, esize, sign, size)  char *name; int esign, esize, sign, size;{       Vprintf("*** %s has wrong type: expected %s %s, found %s %s\n",	       name, sign_of(esign), type_of(esize),	       sign_of(sign), type_of(size));}Procedure ftyperr(name, esize, size) char *name; int esize, size; {       Vprintf("*** %s has wrong type: expected %s, found %s\n",	       name, ftype_of(esize), ftype_of(size));}int promotions() {	int si = 0; long sl = 0;	unsigned int ui; unsigned long ul;	short ss; unsigned short us;	Vprintf("\n%sPROMOTIONS%s\n", co, oc);	if (	    /* Possible warnings here; no problem */	    (sizeof(Promoted(si)) != sizeof(int)) ||	    (sizeof(Promoted(sl)) != sizeof(long)) ||	    (sizeof(Promoted(ss)) != sizeof(int)) ||	    (sizeof(Promoted(ui)) != sizeof(int)) ||	    (sizeof(Promoted(ul)) != sizeof(long)) ||	    (sizeof(Promoted(us)) != sizeof(int)) ||	    is_signed(ui) || is_signed(ul) ||	    !is_signed(si) || !is_signed(sl)	    )	  {	    eek_a_bug("promotions don't work properly in conditional expressions\n");	  }	showtype("unsigned short promotes to", Promoted((unsigned short)0));	showtype("long+unsigned gives", sl+ui);	return 0;}#define checktype(x, n, s, t) if((sgn(x)!=s)||(sizeof(x)!=sizeof(t))) typerr(n, s, sizeof(t), sign_of(x), sizeof(x));#define fchecktype(x, n, t) if (sizeof(x) != sizeof(t)) ftyperr(n, sizeof(x), sizeof(t));Procedure check_defines() {	/* ensure that all #defines are present and have the correct type */#ifdef VERIFY	int usign;#ifdef NO_UI	usign= Signed;#else	/* Implementations promote unsigned short differently */	usign= is_signed((unsigned short)0);#endif	if (L) {#ifdef CHAR_BIT	checktype(CHAR_BIT, "CHAR_BIT", Signed, int);#else	missing("CHAR_BIT");#endif#ifdef CHAR_MAX	checktype(CHAR_MAX, "CHAR_MAX", Signed, int);#else	missing("CHAR_MAX");#endif#ifdef CHAR_MIN	checktype(CHAR_MIN, "CHAR_MIN", Signed, int);#else	missing("CHAR_MIN");#endif#ifdef SCHAR_MAX	checktype(SCHAR_MAX, "SCHAR_MAX", Signed, int);#else	missing("SCHAR_MAX");#endif#ifdef SCHAR_MIN	checktype(SCHAR_MIN, "SCHAR_MIN", Signed, int);#else	missing("SCHAR_MIN");#endif#ifdef UCHAR_MAX	checktype(UCHAR_MAX, "UCHAR_MAX", Signed, int);#else	missing("UCHAR_MAX");#endif#ifdef SHRT_MAX	checktype(SHRT_MAX, "SHRT_MAX", Signed, int);#else	missing("SHRT_MAX");#endif#ifdef SHRT_MIN	checktype(SHRT_MIN, "SHRT_MIN", Signed, int);#else	missing("SHRT_MIN");#endif#ifdef INT_MAX	checktype(INT_MAX, "INT_MAX", Signed, int);#else	missing("INT_MAX");#endif#ifdef INT_MIN	checktype(INT_MIN, "INT_MIN", Signed, int);#else	missing("INT_MIN");#endif#ifdef LONG_MAX	checktype(LONG_MAX, "LONG_MAX", Signed, long);#else	missing("LONG_MAX");#endif#ifdef LONG_MIN	checktype(LONG_MIN, "LONG_MIN", Signed, long);#else	missing("LONG_MIN");#endif#ifdef USHRT_MAX	checktype(USHRT_MAX, "USHRT_MAX", usign, int);#else	missing("USHRT_MAX");#endif#ifdef UINT_MAX	checktype(UINT_MAX, "UINT_MAX", Unsigned, int);#else	missing("UINT_MAX");#endif#ifdef ULONG_MAX	checktype(ULONG_MAX, "ULONG_MAX", Unsigned, long);#else	missing("ULONG_MAX");#endif	} /* if (L) */	if (F) {#ifdef FLT_RADIX	checktype(FLT_RADIX, "FLT_RADIX", Signed, int);#else	fmissing("FLT_RADIX");#endif#ifdef FLT_MANT_DIG	checktype(FLT_MANT_DIG, "FLT_MANT_DIG", Signed, int);#else	fmissing("FLT_MANT_DIG");#endif#ifdef FLT_DIG	checktype(FLT_DIG, "FLT_DIG", Signed, int);#else	fmissing("FLT_DIG");#endif#ifdef FLT_ROUNDS	checktype(FLT_ROUNDS, "FLT_ROUNDS", Signed, int);#else	fmissing("FLT_ROUNDS");#endif#ifdef FLT_EPSILON	fchecktype(FLT_EPSILON, "FLT_EPSILON", float);#else	fmissing("FLT_EPSILON");#endif#ifdef FLT_MIN_EXP	checktype(FLT_MIN_EXP, "FLT_MIN_EXP", Signed, int);#else	fmissing("FLT_MIN_EXP");#endif#ifdef FLT_MIN	fchecktype(FLT_MIN, "FLT_MIN", float);#else	fmissing("FLT_MIN");#endif#ifdef FLT_MIN_10_EXP	checktype(FLT_MIN_10_EXP, "FLT_MIN_10_EXP", Signed, int);#else	fmissing("FLT_MIN_10_EXP");#endif#ifdef FLT_MAX_EXP	checktype(FLT_MAX_EXP, "FLT_MAX_EXP", Signed, int);#else	fmissing("FLT_MAX_EXP");#endif#ifdef FLT_MAX	fchecktype(FLT_MAX, "FLT_MAX", float);#else	fmissing("FLT_MAX");#endif#ifdef FLT_MAX_10_EXP	checktype(FLT_MAX_10_EXP, "FLT_MAX_10_EXP", Signed, int);#else	fmissing("FLT_MAX_10_EXP");#endif#ifdef DBL_MANT_DIG	checktype(DBL_MANT_DIG, "DBL_MANT_DIG", Signed, int);#else	fmissing("DBL_MANT_DIG");#endif#ifdef DBL_DIG	checktype(DBL_DIG, "DBL_DIG", Signed, int);#else	fmissing("DBL_DIG");#endif#ifdef DBL_EPSILON	fchecktype(DBL_EPSILON, "DBL_EPSILON", double);#else	fmissing("DBL_EPSILON");#endif#ifdef DBL_MIN_EXP	checktype(DBL_MIN_EXP, "DBL_MIN_EXP", Signed, int);#else	fmissing("DBL_MIN_EXP");#endif#ifdef DBL_MIN	fchecktype(DBL_MIN, "DBL_MIN", double);#else	fmissing("DBL_MIN");#endif#ifdef DBL_MIN_10_EXP	checktype(DBL_MIN_10_EXP, "DBL_MIN_10_EXP", Signed, int);#else	fmissing("DBL_MIN_10_EXP");#endif#ifdef DBL_MAX_EXP	checktype(DBL_MAX_EXP, "DBL_MAX_EXP", Signed, int);#else	fmissing("DBL_MAX_EXP");#endif#ifdef DBL_MAX	fchecktype(DBL_MAX, "DBL_MAX", double);#else	fmissing("DBL_MAX");#endif#ifdef DBL_MAX_10_EXP	checktype(DBL_MAX_10_EXP, "DBL_MAX_10_EXP", Signed, int);#else	fmissing("DBL_MAX_10_EXP");#endif#ifdef STDC#ifdef LDBL_MANT_DIG	checktype(LDBL_MANT_DIG, "LDBL_MANT_DIG", Signed, int);#else	fmissing("LDBL_MANT_DIG");#endif#ifdef LDBL_DIG	checktype(LDBL_DIG, "LDBL_DIG", Signed, int);#else	fmissing("LDBL_DIG");#endif#ifdef LDBL_EPSILON	fchecktype(LDBL_EPSILON, "LDBL_EPSILON", long double);#else	fmissing("LDBL_EPSILON");#endif#ifdef LDBL_MIN_EXP	checktype(LDBL_MIN_EXP, "LDBL_MIN_EXP", Signed, int);#else	fmissing("LDBL_MIN_EXP");#endif#ifdef LDBL_MIN	fchecktype(LDBL_MIN, "LDBL_MIN", long double);#else	fmissing("LDBL_MIN");#endif#ifdef LDBL_MIN_10_EXP	checktype(LDBL_MIN_10_EXP, "LDBL_MIN_10_EXP", Signed, int);#else	fmissing("LDBL_MIN_10_EXP");#endif#ifdef LDBL_MAX_EXP	checktype(LDBL_MAX_EXP, "LDBL_MAX_EXP", Signed, int);#else	fmissing("LDBL_MAX_EXP");#endif#ifdef LDBL_MAX	fchecktype(LDBL_MAX, "LDBL_MAX", long double);#else	fmissing("LDBL_MAX");#endif#ifdef LDBL_MAX_10_EXP	checktype(LDBL_MAX_10_EXP, "LDBL_MAX_10_EXP", Signed, int);#else	fmissing("LDBL_MAX_10_EXP");#endif#endif /* STDC */	} /* if (F) */#endif /* VERIFY */}#ifdef VERIFY#ifndef SCHAR_MAX#define SCHAR_MAX	char_max#endif#ifndef SCHAR_MIN#define SCHAR_MIN	char_min#endif#ifndef UCHAR_MAX#define UCHAR_MAX	char_max#endif#endif /* VERIFY */#ifndef CHAR_BIT#define CHAR_BIT	char_bit#endif#ifndef CHAR_MAX#define CHAR_MAX	char_max#endif#ifndef CHAR_MIN#define CHAR_MIN	char_min#endif#ifndef SCHAR_MAX#define SCHAR_MAX	char_max#endif#ifndef SCHAR_MIN#define SCHAR_MIN	char_min#endif#ifndef UCHAR_MAX#define UCHAR_MAX	char_max#endifint cprop() {	/* Properties of type char */	Volatile char c, char_max, char_min;	Volatile int bits_per_byte, c_signed;	long char_bit;	Unexpected(2);	/* Calculate number of bits per character *************************/	c=1; bits_per_byte=0;	do { c=c<<1; bits_per_byte++; } while(c!=0);	c= (char)(-1);	if (((int)c)<0) c_signed=1;	else c_signed=0;	Vprintf("%schar = %d bits, %ssigned%s\n",		co, (int)sizeof(c)*bits_per_byte, (c_signed?"":"un"), oc);	char_bit=(long)(sizeof(c)*bits_per_byte);	if (L) i_define(D_CHAR_BIT, "", "CHAR", "_BIT",			char_bit, 0L, (long) CHAR_BIT, "");	c=0; char_max=0;	c++;	if (setjmp(lab)==0) { /* Yields char_max */		while (c>char_max) {			char_max=c;			c++;		}	} else {		Vprintf("%sCharacter overflow generates a trap!%s\n", co, oc);	}	c=0; char_min=0;	c--;	if (setjmp(lab)==0) { /* Yields char_min */		while (c<char_min) {			char_min=c;			c--;		}	}	if (c_signed && char_min == 0) {		Vprintf("%sBEWARE! Chars are pseudo-unsigned:%s\n", co, oc);		Vprintf("%s   %s%s%s\n",			"They contain only nonnegative values, ",			"but sign extend when used as integers.", co, oc);	}	Unexpected(3);	if (L) {		/* Because of the integer promotions, you must use a U after		   the MAX_CHARS in the following cases */		if ((sizeof(char) == sizeof(int)) && !c_signed) {			u_define(D_CHAR_MAX, "", "CHAR", "_MAX",				 (long) char_max,				 (long) CHAR_MAX, "");		} else {			i_define(D_CHAR_MAX, "", "CHAR", "_MAX",				 (long) char_max, 0L,				 (long) CHAR_MAX, "");		}		i_define(D_CHAR_MIN, "", "CHAR", "_MIN",

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -