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

📄 enquire.c

📁 GUN开源阻止下的编译器GCC
💻 C
📖 第 1 页 / 共 5 页
字号:
			 (long) char_min, (long) maxint,			 (long) CHAR_MIN, "");		if (c_signed) {			i_define(D_SCHAR_MAX, "", "SCHAR", "_MAX",				 (long) char_max, 0L,				 (long) SCHAR_MAX, "");			i_define(D_SCHAR_MIN, "", "SCHAR", "_MIN",				 (long) char_min, (long) maxint,				 (long) SCHAR_MIN, "");		} else {			if (sizeof(char) == sizeof(int)) {				u_define(D_UCHAR_MAX, "", "UCHAR", "_MAX",					 (long) char_max,					 (long) UCHAR_MAX, "");			} else {				i_define(D_UCHAR_MAX, "", "UCHAR", "_MAX",					 (long) char_max, 0L,					 (long) UCHAR_MAX, "");			}		}		if (c_signed) {#ifndef NO_UC			Volatile unsigned char c, char_max;			c=0; char_max=0;			c++;			if (setjmp(lab)==0) { /* Yields char_max */				while (c>char_max) {					char_max=c;					c++;				}			}			Unexpected(4);			if (sizeof(char) == sizeof(int)) {				u_define(D_UCHAR_MAX, "", "UCHAR", "_MAX",					 (long) char_max,					 (long) UCHAR_MAX, "");			} else {				i_define(D_UCHAR_MAX, "", "UCHAR", "_MAX",					 (long) char_max, 0L,					 (long) UCHAR_MAX, "");			}#endif		} else {#ifndef NO_SC/* Define NO_SC if this gives a syntax error */ Volatile signed char c, char_max, char_min;			c=0; char_max=0;			c++;			if (setjmp(lab)==0) { /* Yields char_max */				while (c>char_max) {					char_max=c;					c++;				}			}			c=0; char_min=0;			c--;			if (setjmp(lab)==0) { /* Yields char_min */				while (c<char_min) {					char_min=c;					c--;				}			}			Unexpected(5);			i_define(D_SCHAR_MIN, "", "SCHAR", "_MIN",				 (long) char_min, (long) maxint,				 (long) SCHAR_MIN, "");			i_define(D_SCHAR_MAX, "", "SCHAR", "_MAX",				 (long) char_max, 0L,				 (long) SCHAR_MAX, "");#endif /* NO_SC */		}	}	return bits_per_byte;}int basic() {	/* The properties of the basic types.	   Returns number of bits per sizeof unit */	Volatile int bits_per_byte;	typedef int function ();	int variable;	int *p, *q;	Vprintf("%sSIZES%s\n", co, oc);	bits_per_byte= cprop();	/* Shorts, ints and longs *****************************************/	Vprintf("%sshort=%d int=%d long=%d float=%d double=%d bits %s\n",		co,		(int) sizeof(short)*bits_per_byte,		(int) sizeof(int)*bits_per_byte,		(int) sizeof(long)*bits_per_byte,		(int) sizeof(float)*bits_per_byte,		(int) sizeof(double)*bits_per_byte, oc);	if (stdc) {		Vprintf("%slong double=%d bits%s\n",			co, (int) sizeof(Long_double)*bits_per_byte, oc);	}	Vprintf("%schar*=%d bits%s%s\n",		co, (int)sizeof(char *)*bits_per_byte,		sizeof(char *)>sizeof(int)?" BEWARE! larger than int!":"",		oc);	Vprintf("%sint* =%d bits%s%s\n",		co, (int)sizeof(int *)*bits_per_byte,		sizeof(int *)>sizeof(int)?" BEWARE! larger than int!":"",		oc);	Vprintf("%sfunc*=%d bits%s%s\n",		co, (int)sizeof(function *)*bits_per_byte,		sizeof(function *)>sizeof(int)?" BEWARE! larger than int!":"",		oc);if (V) printf ("%s%s %s %s%s\n", co, "Type size_t is",		       ((((false()?( sizeof(int)):(-1))  < 0) )?			"signed":"unsigned") ,		       type_of(sizeof(				      sizeof(int)+0				      )			       ),	       oc);	showtype("Type size_t is", sizeof(0));	/* Alignment constants ********************************************/#define alignment(TYPE) \	((long)((char *)&((struct{char c; TYPE d;}*)0)->d - (char *)0))	Vprintf("\n%sALIGNMENTS%s\n", co, oc);	Vprintf("%schar=%ld short=%ld int=%ld long=%ld%s\n",		co,		alignment(char), alignment(short),		alignment(int), alignment(long),		oc);	Vprintf("%sfloat=%ld double=%ld%s\n",		co,		alignment(float), alignment(double),		oc);	if (stdc) {		Vprintf("%slong double=%ld%s\n",			co,			alignment(Long_double),			oc);	}	Vprintf("%schar*=%ld int*=%ld func*=%ld%s\n",		co,		alignment(char *), alignment(int *), alignment(function *),		oc);	Vprintf("\n");	/* Ten little endians *********************************************/	endian(bits_per_byte);	/* Pointers *******************************************************/	Vprintf("\n%sPROPERTIES OF POINTERS%s\n", co, oc);	if ((long) (char *) &variable == (long) (int *) &variable)		Vprintf("%sChar and int pointer formats seem identical%s\n",		       co, oc);	else		Vprintf("%sChar and int pointer formats are different%s\n",		       co, oc);	if ((long) (char *) &variable == (long) (function *) &variable)		Vprintf("%sChar and function pointer formats seem identical%s\n",		       co, oc);	else		Vprintf("%sChar and function pointer formats are different%s\n",		       co, oc);	if (V) {		if ("abcd"=="abcd")			printf("%sStrings are shared%s\n", co, oc);		else printf("%sStrings are not shared%s\n", co, oc);	}	p=0; q=0;	showtype("Type ptrdiff_t is", p-q);	Vprintf("\n%sPROPERTIES OF INTEGRAL TYPES%s\n", co, oc);	sprop();	iprop();	lprop();	usprop();	uiprop();	ulprop();	promotions();	Unexpected(6);	return bits_per_byte;}#else /* not PASS0 */#ifdef SEPextern jmp_buf lab;extern int V, L, F, bugs, bits_per_byte;extern char co[], oc[];extern char *f_rep();#endif /* SEP */#endif /* ifdef PASS0 *//* As I said, I apologise for the contortions below. The functions are   expanded by the preprocessor twice or three times (for float and double,   and maybe for long double, and for short, int and long). That way,   I never make a change to one that I forget to make to the other.   You can look on it as C's fault for not supporting multi-line macro's.   This whole file is read 3 times by the preprocessor, with PASSn set for   n=1, 2 or 3, to decide which parts to reprocess.*//* #undef on an already undefined thing is (wrongly) flagged as an error   by some compilers, therefore the #ifdef that follows:*/#ifdef Number#undef Number#undef THING#undef Thing#undef thing#undef FPROP#undef Fname#undef Store#undef Sum#undef Diff#undef Mul#undef Div#undef ZERO#undef HALF#undef ONE#undef TWO#undef THREE#undef FOUR#undef Self#undef F_check#undef Validate#undef EPROP#undef MARK/* These are the float.h constants */#undef F_RADIX#undef F_MANT_DIG#undef F_DIG#undef F_ROUNDS#undef F_EPSILON#undef F_MIN_EXP#undef F_MIN#undef F_MIN_10_EXP#undef F_MAX_EXP#undef F_MAX#undef F_MAX_10_EXP#endif#ifdef Integer#undef Integer#undef INT#undef IPROP#undef Iname#undef UPROP#undef Uname#undef OK_UI#undef IMARK#undef I_MAX#undef I_MIN#undef U_MAX#endif#ifdef PASS1/* Define the things we're going to use this pass */#define Number	float#define THING	"FLOAT"#define Thing	"Float"#define thing	"float"#define Fname	"FLT"#define FPROP	fprop#define Store	fStore#define Sum	fSum#define Diff	fDiff#define Mul	fMul#define Div	fDiv#define ZERO	0.0#define HALF	0.5#define ONE	1.0#define TWO	2.0#define THREE	3.0#define FOUR	4.0#define Self	fSelf#define F_check	fCheck#define MARK	"F"#ifdef VERIFY#define Validate(prec, val, req, same) fValidate(prec, val, req, same)#endif#define EPROP	efprop#define Integer	short#define INT	"short"#define IPROP	sprop#define Iname	"SHRT"#ifndef NO_UI#define OK_UI 1#endif#define IMARK	""#define UPROP	usprop#define Uname	"USHRT"#ifdef VERIFY#ifdef SHRT_MAX#define I_MAX		SHRT_MAX#endif#ifdef SHRT_MIN#define I_MIN		SHRT_MIN#endif#ifdef USHRT_MAX#define U_MAX		USHRT_MAX#endif#ifdef FLT_RADIX#define F_RADIX		FLT_RADIX#endif#ifdef FLT_MANT_DIG#define F_MANT_DIG	FLT_MANT_DIG#endif#ifdef FLT_DIG#define F_DIG		FLT_DIG#endif#ifdef FLT_ROUNDS#define F_ROUNDS	FLT_ROUNDS#endif#ifdef FLT_EPSILON#define F_EPSILON	FLT_EPSILON#endif#ifdef FLT_MIN_EXP#define F_MIN_EXP	FLT_MIN_EXP#endif#ifdef FLT_MIN#define F_MIN		FLT_MIN#endif#ifdef FLT_MIN_10_EXP#define F_MIN_10_EXP	FLT_MIN_10_EXP#endif#ifdef FLT_MAX_EXP#define F_MAX_EXP	FLT_MAX_EXP#endif#ifdef FLT_MAX#define F_MAX		FLT_MAX#endif#ifdef FLT_MAX_10_EXP#define F_MAX_10_EXP	FLT_MAX_10_EXP#endif#endif /* VERIFY */#endif /* PASS1 */#ifdef PASS2#define Number	double#define THING	"DOUBLE"#define Thing	"Double"#define thing	"double"#define Fname	"DBL"#define FPROP	dprop#define Store	dStore#define Sum	dSum#define Diff	dDiff#define Mul	dMul#define Div	dDiv#define ZERO	0.0#define HALF	0.5#define ONE	1.0#define TWO	2.0#define THREE	3.0#define FOUR	4.0#define Self	dSelf#define F_check	dCheck#define MARK	""#ifdef VERIFY#define Validate(prec, val, req, same) dValidate(prec, val, req, same)#endif#define EPROP	edprop#define Integer	int#define INT	"int"#define IPROP	iprop#define Iname	"INT"#define OK_UI	1 /* Unsigned int is always possible */#define IMARK	""#define UPROP	uiprop#define Uname	"UINT"#ifdef VERIFY#ifdef INT_MAX#define I_MAX		INT_MAX#endif#ifdef INT_MIN#define I_MIN		INT_MIN#endif#ifdef UINT_MAX#define U_MAX		UINT_MAX#endif#ifdef DBL_MANT_DIG#define F_MANT_DIG	DBL_MANT_DIG#endif#ifdef DBL_DIG#define F_DIG		DBL_DIG#endif#ifdef DBL_EPSILON#define F_EPSILON	DBL_EPSILON#endif#ifdef DBL_MIN_EXP#define F_MIN_EXP	DBL_MIN_EXP#endif#ifdef DBL_MIN#define F_MIN		DBL_MIN#endif#ifdef DBL_MIN_10_EXP#define F_MIN_10_EXP	DBL_MIN_10_EXP#endif#ifdef DBL_MAX_EXP#define F_MAX_EXP	DBL_MAX_EXP#endif#ifdef DBL_MAX#define F_MAX		DBL_MAX#endif#ifdef DBL_MAX_10_EXP#define F_MAX_10_EXP	DBL_MAX_10_EXP#endif#endif /* VERIFY */#endif /* PASS2 */#ifdef PASS3#ifdef STDC#define Number	long double#define ZERO	0.0L#define HALF	0.5L#define ONE	1.0L#define TWO	2.0L#define THREE	3.0L#define FOUR	4.0L#endif#define THING	"LONG DOUBLE"#define Thing	"Long double"#define thing	"long double"#define Fname	"LDBL"#define FPROP	ldprop#define Store	ldStore#define Sum	ldSum#define Diff	ldDiff#define Mul	ldMul#define Div	ldDiv#define Self	ldSelf#define F_check	ldCheck#define MARK	"L"#ifdef VERIFY#define Validate(prec, val, req, same) ldValidate(prec, val, req, same)#endif#define EPROP	eldprop#define Integer	long#define INT	"long"

⌨️ 快捷键说明

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